【发布时间】:2018-05-05 01:26:51
【问题描述】:
我正在使用 socketio 来运行 websocket 服务器。
var fs = require('fs');
var options = {
key: fs.readFileSync('/etc/letsencrypt/live/my.domain.be/privkey.pem'),
cert: fs.readFileSync('/etc/letsencrypt/live/my.domain.be/fullchain.pem')
};
var app = require('https').createServer(options)
, io = require('socket.io').listen(app)
app.listen(6666);
从 javascript 连接到它(使用 socket.io 客户端)工作正常。
var socket = io.connect('wss://my.domain.be:6666');
这也有效:
var socket = io.connect('https://my.domain.be:6666');
现在我想使用 php 进行连接。 我在这里找到了一个简单的 php 客户端:How can I send data/text from PHP using WebSocket to process?
但我在使用时没有看到传入连接:
$WebSocketClient = new WebsocketClient('wss://my.domain.be', 6666);
$WebSocketClient->sendData("MyUserNameFromPHP");
我得到了错误:
错误:22145040:无法找到套接字传输“wss” - 你有吗 配置PHP时忘记开启?
使用时:
$WebSocketClient = new WebsocketClient('https://my.domain.be', 6666);
我得到了错误:
错误:10905616:无法找到套接字传输“https” - 你是 配置PHP时忘记开启?
当使用 tls:// 或 ssl:// 时,我根本没有输出(我的 websocket 服务器上仍然没有连接)。
那么从我的 php 代码建立 websocket 连接我缺少什么?
【问题讨论】:
-
你试过
$WebSocketClient = new WebsocketClient('https://my.domain.be', 6666);吗?似乎“wss”是一个必须手动添加到 php 的套接字传输协议(不是 100%,只是我从该错误消息中收集到的)。 -
然后我得到:找不到套接字传输“https”(添加到我的原始帖子中)
-
尝试用websocket服务器的ip地址代替域名(前面没有协议什么的)例如:
$WebSocketClient = new WebsocketClient('111.111.111.111', 6666); -
IP 地址上的连接将被拒绝,因为 ssl 证书仅对域“my.domain.be”有效。尽管这是我在 javascript 代码 (socket.io) 中尝试此操作时我的网络浏览器告诉我的内容。在 php 中对此进行测试再次完全没有输出(并且我的 websocket 服务器上没有连接)。
-
这有什么帮助吗? stackoverflow.com/a/28393526/1025702 或许您需要在 apache 或您正在使用的任何服务器中启用 wss?
标签: php node.js websocket socket.io