是否可以通过NodeJS将来自应用程序的Socket传输到http?
我用UDP或TCP的应用程序(用c ++)发送我的套接字(如果在UDP中不可能......)到NodeJS。
来自NodeJS的我的脚本:
var server = dgram.createSocket("udp4");
server.on("message", function (content, rinfo)
{
console.log("socket: " + content + " from " + rinfo.address + ":" + rinfo.port); });
server.on("listening", function () {
});
server.bind(7788);
到目前为止这个功能,但是然后如何将我的套接字转移到Socket.io?
我想将套接字发送到Socket.io(例如)以将套接字传输到HTTP。例如,通过使用这样的函数,但没有更新建立到socket.io的连接:
io.sockets.on('connection', function (socket) {
socket.emit(content);
});
感谢您的帮助。
++ Metra。
答案 0 :(得分:8)
这是一个完整的示例,其中包含一个socket.io服务器,一个发送一个非常简单的页面的Web服务器(它只是将所有消息记录到控制台)和一个监听消息的UDP套接字,将它们传递给所有连接的客户端:
var http = require('http'),
dgram = require('dgram'),
socketio = require('socket.io');
var app = http.createServer(handleRequest),
io = socketio.listen(app),
socket = dgram.createSocket('udp4');
socket.on('message', function(content, rinfo) {
console.log('got message', content, 'from', rinfo.address, rinfo.port);
io.sockets.emit('udp message', content.toString());
});
function handleRequest(req, res) {
res.writeHead(200, {'content-type': 'text/html'});
res.end("<!doctype html> \
<html><head> \
<script src='/socket.io/socket.io.js'></script> \
<script> \
var socket = io.connect('localhost', {port: 8000}); \
socket.on('udp message', function(message) { console.log(message) }); \
</script></head></html>");
}
socket.bind(7788);
app.listen(8000);
更新:如io.sockets.emit
所示,UDP端口7788上收到的所有邮件都会发送到所有连接的客户端。如果要根据消息中的某些数据或类似数据路由它们,可以使用Socket.IO的“房间”功能:io.sockets.of(someRoom).emit
。在Socket.IO的连接处理程序中,您可以join
每个客户端到某个房间。