swoole 如何实现 websocket 客户端的功能?

2017-11-23 17:48:59 +08:00
 LiuXuFei

workerman 的 websocket 客服端是这样实现的:(很简单,很容易就使用了,和前端差不多)

http://doc.workerman.net/315306

swoole 如何实现这样相同的功能呢?

看了一下的一些文档,始终无法理解:

https://github.com/matyhtf/framework/blob/master/libs/Swoole/Client/WebSocket.php

https://wiki.swoole.com/wiki/page/p-http_client.html

如果只是获取的话,比较简单:

<?php
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);

$client->on('connect', function($cli) {
    $cli->send("GET / HTTP/1.1\r\n\r\n");
});
$client->on('receive', function($cli, $data) {
    echo "Received: " . $data;
});
$client->on('error', function($cli) {
    echo "Connect failed\r\n\r\n";
});
$client->on('close', function($cli) {
    echo "Connection close\r\n\r\n";
});

$client->connect('xxx.xxx.xxx.xxx', 1234, true);

但是我这里想要实现的是类似 workerman 那样的,可以一直连接。

4096 次点击
所在节点    PHP
8 条回复
owenliang
2017-11-23 17:59:20 +08:00
我给你的建议是用 Go。
extreme
2017-11-23 18:01:06 +08:00
LiuXuFei
2017-11-23 18:18:36 +08:00
@owenliang 现在是用 swoole 遇到问题,不是用其他的问题
LiuXuFei
2017-11-23 18:19:28 +08:00
@extreme 看过了,不大理解,不像 workerman 那么好理解,有像 workerman 类似的例子吗?
GreatHumorist
2017-11-23 23:52:50 +08:00
swoole 不是直接有 websocket server 吗
BruceHong
2017-11-24 00:31:55 +08:00
websocket 只是一个文本协议(和 http 差不多),原理就是 TCP 连接后通过 HTTP 101 upgrade 到 ws 协议,别太纠结具体实现。
LiuXuFei
2017-11-24 08:31:21 +08:00
@GreatHumorist 是要 swoole 做客户端的例子,不是服务端
tanszhe
2017-11-24 13:55:41 +08:00
你不关就一直连接啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/408982

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX