0

これはおそらく単純な間違いです。私はsocket.ioを実行しているnodejsサーバーを持っています。サーバー内ですべてを動作させることができます。

ただし、PHP を介してノード サーバーに CURL ポストを作成し、データを送信できるようにしたいと考えています。サーバーにリクエストを受信させることはできますが、データを送信しようとすると、ソケットが定義されていないというエラーが表示されます。

これは私のコードでは明らかです。私の質問は、サーバーをセットアップする前に socket.io を要求するにはどうすればよいですか? 私のコードが私の問題を説明するのに役立つことを願っています:

var http = require('http')
, url = require('url')
, fs = require('fs')
, server;

server = http.createServer(function(req, res) {
// your normal server code
var path = url.parse(req.url).pathname;
switch (path){
   case '/':
     res.writeHead(200, {'Content-Type': 'text/html'});
     res.write('<h1>Hello! <a href="/index.html">Enter</a></h1>');
     res.end();
     break;
   case '/index.html':
     fs.readFile(__dirname + path, function(err, data){
        if (err) return send404(res);
        res.writeHead(200, {'Content-Type': path == 'json.js' ? 'text/javascript' : 'text/html'})
        res.write(data, 'utf8');
        res.end();
     });
    break;
   case '/write.html':
     fs.readFile(__dirname + path, function(err, data){
        if (err) return send404(res);
        res.write(data, 'utf8');
        res.end();
     });
   break;
  case '/post':
     console.log(req.toString());
     socket.broadcast.emit('user', {state: 'PHP Post', userid: 'PHP'});
     res.writeHead(200);
     res.end();
   break;

  default: send404(res);
}
}),

send404 = function(res){
   res.writeHead(404);
   res.write('404');
   res.end();
};

server.listen(843);

// socket.io 
var io = require('socket.io').listen(server);

// Regular socket.io events
4

1 に答える 1

3

サーバーをセットアップする前に socket.io を要求するにはどうすればよいですか?

その部分はとても簡単です。ファイルの先頭で、次のようにします。

var http = require('http')
, url = require('url')
, fs = require('fs')
, socketIO = require('socket.io')  // <-- added line
, server;

そして一番下に:

var io = socketIO.listen(server);

問題は、POSTハンドラーで を使用しているsocket.broadcast.emitが、socket定義されていないことです。すべてのSocket.IO ユーザーにメッセージを送信しようとしていますか? もしそうなら、あなたは使うことができますio.sockets.emit; 私はおそらく次のようなことをするでしょう:

var http = require('http')
, url = require('url')
, fs = require('fs')
, server
, io;

...

case '/post':
   console.log(req.toString());
   io.sockets.emit('user', {state: 'PHP Post', userid: 'PHP'});
   res.writeHead(200);
   res.end();
 break;

...

io = require('socket.io').listen(server);

単一のソケット、または特定のソケットを除くすべてのソケットにデータを送信しようとしている場合 (これは通常 を使用する方法ですsocket.broadcast)、何らかの方法で HTTP リクエストを Socket.IO ソケットにマップする必要があります。これにはセッションを使用するのが一般的です。

于 2012-09-18T16:02:31.130 に答える