通过 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)的字符串。

广告
将在 10 秒后关闭
bannerAds