通过 socket.io-php-emitter 在 PHP 中进行 emit 的方法
要动态移动,需要 Redis 和 PHP 的 Redis 库。
用过的版本
-
- PHP 7.0.10
-
- Redis 3.2.3
-
- Node.js 4.3.2
- npm 2.14.12
请提供样例代码。
服务器/包的 JSON 文件
{
"name": "sample-server",
"main": "index.js",
"dependencies": {
"express": "^4.10.2",
"socket.io": "^1.4.8",
"socket.io-redis": "^1.0.0"
},
"devDependencies": {
"nodemon": "^1.9.1"
}
}
服务器/index.js
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var redis = require('socket.io-redis');
var adapter = io.adapter(redis({ host: '127.0.0.1', port: 6379 }));
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
服务器/主页.html (simplified)
伺服器/首頁.html (traditional)
<script src="https://cdn.socket.io/socket.io-1.4.8.js"></script>
<script>
var socket = io.connect('http://localhost:3000/');
socket.on('update', function(socket){
console.log('received emit!');
});
</script>
php-emitter的composer.json文件
{
"name": "sample-client",
"type": "project",
"require": {
"ashiina/socket.io-emitter": "^0.8.0"
}
}
截至2016年9月16日,由于互換性問題,rase/socket.io-emitter無法運作,因此我們改用志願者公開修復版的ashiina/socket.io-emitter。詳細情況請參閱《socket.io-php-emitter 0.7.0無法運作問題》一文。
php-emitter/src/client.php的中文翻译如下:
<?php
require_once('../vendor/autoload.php');
$redis = new \Redis();
$redis->connect('127.0.0.1', '6379');
$emitter = new SocketIO\Emitter($redis);
$emitter->emit('update', 'data'));
确认方式
在使用以下命令启动Node服务器的情况下,将 index.html(http://localhost:3000/)在浏览器中显示出来。
node index.js
如果在该状态下执行client.php并在控制台上显示“received emit!”则表示通信成功。?
在确认连通性时非常有用的调试方法
因为最初尝试时经历了一些连接问题,所以我将写下一些有用的调试方法。
1. 启用服务器的调试模式
在启动节点服务器时,将调试模式打开会在 emit 时传递详细信息。
DEBUG=* node index.js
2. Redis 监控
通过 Redis 进行 emit,可以在 Redis 控制台上执行 monitor 命令来查看实际通信内容(msgpack)的字符串。