使用socket.io在应用程序之间进行通信

时间:2014-01-03 13:04:17

标签: node.js socket.io

我有一个需要将状态日志发送到服务器的应用程序,但我正在努力发送数据。

我的代码是:(我使用的是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应用程序。

1 个答案:

答案 0 :(得分:1)

我假设您安装的1.0版本的API不同于0.9。

http://socket.io上的文档仍然引用0.9,因此您必须查看github上的README以获取新方法签名:https://github.com/learnboost/socket.io