我正在开发一个简单的Node.js双向客户端\服务器通信通道,我正在尝试在服务器和 socket.io-client上使用 socket.io 在客户端上。
我已经插入了下面的代码,因为你会发现它是非常基本的东西,而且我在我的本地机器上运行 - 以最大限度地降低复杂性。
我看到的行为是:
我期望服务器记录'客户端就绪!'消息,然后记录内容('Ready received')。
我甚至使用WireShark嗅探线路,看起来客户端正在按照设计发出消息 - 但是服务器上的回调没有触发。
我正在使用 express v3.1.0 , socket.io v0.9.13 和套接字运行 node v0.8.4 。 io-client v0.9.11 (全部通过 npm 安装)。
这是服务器代码......
var http = require('http'),
express = require('express'),
app = express(),
server = http.createServer(app);
app.configure(function(){
app.use(express.static(__dirname + '/public'));
});
server.listen(8080);
console.log("Server started");
var io = require('socket.io').listen(server);
io.sockets
.on('connection', function(socket){
socket.emit('server ready', { msg: 'ready' }) ;
})
.on('comms', function(content) {
console.log('Client is ready!');
console.log(content);
});
这是客户端代码......
var clientio = require('socket.io-client');
var socket = new clientio.connect('http://localhost', { port: 8080 });
socket
.on('server ready', function(data){
console.log('Server is ready!');
socket.emit('comms', 'Ready received');
})
.on('connect-error', function(error) {
console.log('Connection Error\n' + error);
})
.on('error', function(error) {
console.log('Socket Error\n' + error);
})
socket.io 和 socket.io-client 的文档和示例有些混淆(要慈善),它们看起来有点动人目标......但据我所知,我认为这应该有用。
我希望有人能就我出错的地方给我建议吗?
答案 0 :(得分:4)
在您的服务器中,您有以下代码:
io.sockets
.on('connection', function(socket){
socket.emit('server ready', { msg: 'ready' }) ;
})
.on('comms', function(content) {
console.log('Client is ready!');
console.log(content);
});
你应该做的是这样的事情:
io.sockets.on('connection', function(socket){
socket.emit('server ready', { msg: 'ready' });
socket.on('comm', function(content){
console.log('Client is ready!');
console.log(content);
});
});
答案 1 :(得分:3)
希望这或多或少地做你需要它做的事情。只是一些小的改变。
<强> app.js 强>
var app = require('express')()
, server = require('http').createServer(app)
, io = require('socket.io').listen(server);
// using 'connect' to handle static pages
app.use(require('connect').static(__dirname + '/public'))
server.listen(8080);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.sockets.on('connection', function (socket) {
socket.emit('server ready', { msg: 'ready' });
socket.on('comms', function(content) {
console.log(('Client is ready\n'));
console.log(content);
});
});
<强>的index.html 强>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
</script>
<script>
window.jQuery || document.write('<script src="js/jquery-1.8.3.min.js"><\/script>')
</script>
<script src="/socket.io/socket.io.js"></script>
</head>
<body>
<script>
(function (d, b) {
function bindEvents() {
function doSomething(msg) {
$.each(msg, function (key, value) {
console.log('doSomething...');
$("body").append("<p>" + value + "</p>")
});
};
// var socket = io.connect();
var socket = io.connect('http://localhost');
socket.on('server ready', function (msg) {
console.log('Server is ready!\n', msg);
doSomething(msg);
socket.emit('comms', {
msg: 'Client is Ready'
});
});
socket.on('connect-error', function (err) {
console.log('Connection Error\n', err);
});
socket.on('error', function (err) {
console.log('Connection Error\n', err);
});
};
$(document).ready(function () {
bindEvents()
});
})(jQuery, this)
</script>