我有一个需要将状态日志发送到服务器的应用程序,但我正在努力发送数据。
我的代码是:(我使用的是localhost,因为我现在没有其他计算机进行测试;在实际情况下,多个应用程序将与服务器通信)
var fs = require('fs'),
io = require('socket.io'),
IP = '',
PATH = process.argv[1].substr(0, process.argv[1].lastIndexOf('/') + 1); //Path of the app
function log(LOG, message) { //wrapper for console.log, with formatting for my logs
if(!message) {
console.log('T-\t' + LOG);
} else {
console.log('T-\t' + LOG + :\t' + message);
}
}
expots.start = function start() {
log('APP');
fs.readFile(PATH + 'server', function(err, data) { //PATH/server is a text file, wich contain 'localhost'
if(err) {
log('ERROR', 'Can t read ' + PATH + 'server');
} else {
setTimeout(function () { //delay for the server to start before trying to connect
log('timeout end');
data = '' + data;
IP = data.substr(0, data.indexOf('\n')); //get IP without \n
log('IP is', IP);
var socket = io.connect(); //Don t know if I can put IP here
socket.emit('data', {m: 'test'});
}, 5000);
}
});
}
以下是服务器的代码:
function log(LOG, message) {
if(!message) {
console.log('S-\t' + LOG);
} else {
console.log('S-\t' + LOG + :\t' + message);
}
}
exports.start = function start() {
log('SERVER');
var io = require('socket.io');
log('Server start');
io.sockets.on('connection', function socket) {
log('Connection from', socket);
socket.on('data', function (m) {
log('mail', m);
});
});
}
我使用bash命令同时启动它们,我得到了多个错误。我不知道出了什么问题。
错误是:
服务器:
io.sockets.on('connection', function (socket) {
^
TypeError: Cannot call method 'on' of undefined
at Object.start
at process.i
at process.EventEmitter.emit
at handleMessage
at Pipe.channel.onread
应用程式:
var socket = io.connect();
TypeError: Object #<Object> has no method 'connect'
at null._onTimeout
at Timer.listOnTimeout [as ontimeout]
我从npm新安装了socket.io。 node.js的版本是v0.10.21。
编辑:socket.io是版本9.16 但我想突出显示服务器本身不启动应用程序,它们是分开启动的,与发送html页面的示例不同,它是一个自包含的node.js应用程序。
答案 0 :(得分:1)
我假设您安装的1.0版本的API不同于0.9。
http://socket.io上的文档仍然引用0.9,因此您必须查看github上的README以获取新方法签名:https://github.com/learnboost/socket.io