这可能是一个简单的错误。我有一个运行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
答案 0 :(得分: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插座; using sessions for this is common