手边上有一个nodejs+socket.io搭建的消息通知系统,并且还有一个php的后台系统
需求:在php写的后台给连接到nodejs+socket.io服务器上的所有客户端发送一个消息,
我们知道使用nodejs+socket.io的时候都是在页面中引用一个js然后使用js建立连接发送消息进行一些操作的,现在需要直接用php连接nodejs+socket.io并且发送通知
解决方法
已经有大神写好啦直接拿过来用就可以。
elephant.io 里面已经封装好啦socket0.x 1.x 2.x对应的类安装最新版本就可以 github地址 https://github.com/wisembly/elephant.io
使用composer安装,打开composer.json加入下面包进行安装"require": {
"wisembly/elephant.io": "~3.0"
},
使用方法use ElephantIO\Client;
use ElephantIO\Engine\SocketIO\Version1X;
require __DIR__ . '/vendor/autoload.php';
$client = new Client(new Version1X('http://localhost:4000', [
'headers' => [
'X-My-Header: websocket rocks',
'Authorization: Bearer 12b3c4d5e6f7g8h9i',
],
]));
$client->initialize();
$client->emit('notify', ['foo' => 'bar']);
$client->close();
注意里面使用的版本version1X对就的还有version2X version0X
如果连接socket.io时需要传参数进行验证可以直接在url后面加参数 http:localhost:4000?yanzheng=adsfasdfsdasdfdasf
服务器取出参数进行相应的验证处理(两个地方都可以取出)io.use(function(socket, next) {
var query = socket.request._query;
var yz = query.yanzheng;
next();
});
第二个地方io.set('authorization', function(handshakeData, accept) {
var query = handshakeData._query;
console.log(query.yanzheng);
//接受连接
accept(null, true);
return;
});