express,用于浏览器客户端和 node.js 客户端的 socket.io 服务器
Posted
技术标签:
【中文标题】express,用于浏览器客户端和 node.js 客户端的 socket.io 服务器【英文标题】:express, socket.io server for browser client and node.js client 【发布时间】:2015-10-21 05:04:30 【问题描述】:我正在尝试使用 socket.io 设置一个快速服务器,它将允许 node.js 客户端和浏览器客户端连接。浏览器连接没有问题。使用 socket.io-client 的 node.js 客户端报错:
unhandled socket.io url
服务器:
var express = require('express'),
io = require('socket.io');
var app = express();
var host = 'localhost';
var port = process.env.PORT || 8080;
var server = app.listen(port, function()
console.log('Gulp is starting my app on PORT: ' + port)
);
io = io.listen(server);
app.use('/', express.static(__dirname + '/'));
io.on("connection", function(socket)
socket.on('clientMessage', function(jsonData, from)
socket.emit('serverMessage', 'Got a message!');
console.log('Data being sent from', from, 'is:\n' + jsonData);
);
);
客户:
var io = require('socket.io-client')
var socket = io.connect('http://192.168.1.222:8080', reconnect: true);
socket.emit('clientMessage', 'Hello', 'Pi-Voyager');
【问题讨论】:
我测试了你的代码,它运行良好。 行为是什么?它告诉我 Unhandled socket.io url。 【参考方案1】:问题在于我需要依赖项的方式。它适用于其他版本,但在我当前的版本上却没有。
node -v
v0.12.4
"express": "^4.13.1",
"socket.io": "^1.3.6",
"socket.io-client": "^1.3.6"
使用这些版本,以下代码可以工作:
服务器
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 8080;
server.listen(port, function()
console.log('Gulp is starting my app on PORT: ' + port)
);
app.get('/', function (req, res)
res.sendFile(__dirname + '/index.html');
);
io.on("connection", function(socket)
socket.on('clientMessage', function(jsonData, from)
socket.emit('serverMessage', 'Got a message!');
console.log('Data being sent from', from, 'is:\n' + jsonData);
);
);
客户
var io = require('socket.io-client')
var socket = io.connect('http://10.1.0.47:8080', reconnect: true);
socket.emit('clientMessage', 'Hello', 'Pi-Voyager');
【讨论】:
以上是关于express,用于浏览器客户端和 node.js 客户端的 socket.io 服务器的主要内容,如果未能解决你的问题,请参考以下文章
Windows下Node.js+Express+WebSocket 安装配置
在 Express JS 中为 Ajax 设置 REST 路由,仅用于 Backbone
Node.js - Express.js JWT 总是在浏览器响应中返回一个无效的令牌错误