我在局域网上运行我的网站,所以我可以在开发时测试它。它实际上是使用PHP作为服务器端脚本,NodeJS使用Redis和Socket.io将一些数据发送给客户端。
这就是server.js
的样子:
var express = require('express'),
http = require('http'),
server = http.createServer(app);
var app = express();
const redis = require('redis');
const io = require('socket.io');
// The server's redis client
const client = redis.createClient();
server.listen(3000, '192.168.0.103');
io.listen(server).on('connection', function(socket) {
const redisClient = redis.createClient();
// The client's redis client
redisClient.subscribe('ratings.upvote');
redisClient.subscribe('followers.newFollower');
redisClient.on('message', function(channel, message) {
socket.emit(channel, message);
});
client.on('disconnect', function() {
redisClient.quit();
});
});
LAN上的服务器地址是192.168.0.103
,这是我用来连接服务器的客户端javascript:
var socket = socketio.connect('192.168.0.103:3000');
socket.set('transports',
[
'websocket',
'flashsocket',
'htmlfile',
'xhr-polling',
'jsonp-polling'
]);
socket.set('origins', '*:*');
连接成功,我在浏览器的JS控制台中没有收到任何错误消息(NodeJS确认了这一点)。
我在同一台计算机上运行Redis,Nginx和NodeJS,而LAN上的其他每台计算机都可以http://192.168.0.103
访问网络服务器。
修改
当只有服务器在我的本地计算机上运行且所有地址都设置为127.0.0.1
时,Socket.io emit
正在运行(仅限服务器)。