Socket.io错误(socket.send不是函数)

时间:2011-12-22 20:23:06

标签: node.js websocket socket.io

我第一次尝试使用Websockets / Node.js / Socket.io / Express,我正在尝试创建一个简单的聊天程序。一切运行正常,我在节点中看到两个客户端。

但是当我尝试执行socket.send()时,我在Firefox中出错(socket.send不是函数)。它没有抱怨socket.connect()因此我知道socket.io.js已加载。

这是我的服务器代码:

var sys = require('util');
var express = require('express');
var io = require('socket.io');

var app = express.createServer();
app.listen(8080);
app.use(express.static(__dirname));

app.get('/', function (req, res) {
    res.render('index.html', {
        title: 'Chat'
    });
});

var socket = io.listen(app);

socket.on('connection', function (client) {
    client.on('message', function (message) {
        console.log("Message: " + JSON.stringify(data));
        socket.broadcast(message);
    });
    client.on('disconnect', function () {});
});

我的客户代码:

<script src="http://localhost:8080/socket.io/socket.io.js"></script>

var socket = new io.Socket("http://localhost:8080");
socket.connect();

然后我做一些代码来获取聊天消息并发送它。

socket.send(JSON.stringify(values));

3 个答案:

答案 0 :(得分:1)

socket.broadcast(message);应为io.sockets.emit('key', message);

当您使用传入的套接字对象时,将连接事件只向该客户端发送信息,向所有客户端发送,您必须使用io.sockets.emit()

也与socket.send(JSON.stringify(values));我认为您想要socket.emit(namespace, data);

从我的一个项目中查看我的连接文件:https://github.com/AdminSpot/HangoutCanopy/blob/master/javascripts/connection.js

答案 1 :(得分:1)

说明

您尚未在服务器端和客户端正确初始化Socket.io。

  • 客户端

    1. new io.Socket("http://localhost:8080");没有为您提供所需的对象,您需要new io.connect("http://localhost:8080");

    2. 您需要等到客户端连接到服务器才能发送消息。

  • 服务器端

    1. socket是Socket.IO发回的对象,您需要使用socket.sockets才能访问on

    2. 要广播消息,您需要使用如下客户端对象:client.broadcast.send()

    3. 广播中不存在变量data。你可能意思是message

<强>解决方案

  • 服务器

    var sys = require('util'),
        express = require('express'),
        io = require('socket.io'),
        app = express.createServer();
    
    app.listen(8080);
    
    app.use(express.static(__dirname));
    
    app.get('/', function (req, res) {
        res.render('index.html', {
            title: 'Chat'
        });
    });
    
    var io = io.listen(app);
    
    io.sockets.on('connection', function (client) {
        client.on('message', function (message) {
            console.log("Message: " + JSON.stringify(message));
            client.broadcast.send(message);
        });
    
        client.on('disconnect', function () {});
    });
    
  • <强>客户端

    <script src="http://localhost:8080/socket.io/socket.io.js"></script>
    <script>
        var socket = new io.connect("http://localhost:8080"),
            connected = false;
    
        socket.on('connect', function () {
            connected = true;
        });
    
        // Use this in your chat function.
        if (connected) {
            socket.send(JSON.stringify(values));
        }
    </script>
    

答案 2 :(得分:0)

您必须等待socket.io在客户端连接

var socket = new io.Socket("http://localhost:8080");
socket.connect();
socket.on('connect', function() {
  socket.emit('event', data);
});