我有以下nodejs服务器代码
http = require('http');
fs = require('fs');
url = require('url');
server = http.createServer( function(req, res) {
console.dir(req.param);
if (req.method == 'POST') {
console.log("POST");
// I WANT TO EMIT THIS DATA TO CLIENT
}
else
{
console.log("GET");
}
});
//THIS IS A WORKING EXAMPLE WHICH I FOUND ONLINE TIED TOGETHER
io = require('/usr/local/lib/node_modules/socket.io').listen(server);
io.sockets.on( 'connection', function ( socket ) {
console.log("runing time");
sendTimeMessage(socket);
});
function sendTimeMessage(socket){
console.log("in time");
var now= new Date().getTime();
socket.emit('notification', {'message': now});
setTimeout(function() {
socket.emit('notification', {'message': "after 5s"});
},5000);
}
port = 8000;
host = '127.0.0.1';
server.listen(port, host);
console.log('Listening at http://' + host + ':' + port);
客户端
<!doctype html>
<html>
<head>
<script src="http://127.0.0.1:8000/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:8000');
socket.on('notification', function (data) {
console.log(data);
});
</script>
</head>
<body>
<ul id='messages'></ul>
</body>
</html>
请原谅这个例子。我想要实现的是,当我的nodejs服务器发生帖子时,我想将它发送到前端。我是nodejs和socket的新手,但我知道javascript是如何工作的。
有没有办法让socketio在POST中发出?
答案 0 :(得分:0)
如果要将数据发送到使用套接字的服务器,请通过套接字发送数据,而不是通过发布请求进行发送。或者,如果您必须使用帖子,您可以通过res.send将其发送回客户端(&#39;数据在这里&#39;);
如果这些选项都不适合你,那么也许你可以设置某种中间选项。例如,将post请求中的数据记录到数据库,并有一个脚本轮询数据库中的更改,然后将它们推送到套接字。这很hacky,绝对不是推荐的做法。
编辑:另一种方法可能是创建一个全局变量(yuck),这是一个以某种ID作为键的套接字列表。然后使用您的发布请求发送该ID,并从您的全局变量中获取套接字并从那里发送数据。例如:
var sockets = {};
var server = http.createServer( function(req, res) {
if (req.method == 'POST') {
// You will need to pass the socket ID from the client
sockets[request.data.id].emit('Some data');
}
});
var io = require('/usr/local/lib/node_modules/socket.io').listen(server);
io.sockets.on( 'connection', function ( socket ) {
sockets[socket.id] = socket;
});
这是未经测试的,并且不保证没有安全漏洞