Help us understand the problem. What is going on with this article?

socket.io-php-emitter で PHP から emit する方法

More than 3 years have passed since last update.

動かすには Redis と PHP の Redis ライブラリが必要です。

使用したバージョン

  • PHP 7.0.10
  • Redis 3.2.3
  • Node.js 4.3.2
  • npm 2.14.12

サンプルソース

server/package.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"
  }
}

server/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');
});

server/index.html

<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年09月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. サーバのデバッグモードの有効化

デバッグモードを有効にして node サーバを起動しておくと emit 時に詳細な情報が流れます。

DEBUG=* node index.js

2. Redis のモニタリング

Redis を介して emit するため、Redis のコンソールで monitor コマンドを実行しておくと実際の通信内容 (msgpack) の文字列を確認できます。

ymm1x
明日を今日より生きやすく。
https://sousaku-memo.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした