【问题标题】:Why doesn't emit event fire by socket.io为什么socket.io不发出事件触发
【发布时间】:2012-08-03 06:11:42
【问题描述】:

我正在使用 socket.io + express。 我想从客户端向服务器发出 'start' 和 'user_info' 事件。但它不起作用。我是这样写的……

server.js

var express = require("express");
var http = require("http");
var socket = require("socket.io");
var app = express();
var ejs = require("ejs");
var server = http.createServer(app);
var io = require("socket.io").listen(server);
var redis = require("redis");
var _ = require("underscore");
require("./models/User");

app.get("/",function(req,res){

  res.render("index",{});

});

  
  socket.on("start",function(data){
    console.log("Started");
  });

   socket.on("user_info",function(user_info){
    var self = this;
        var name = user_info.name;
        var password = user_info.password;
    user.name = name;
    user.password = password;
    var data = JSON.stringify({name: name,password: password});
  });



### client.js


$(document).ready(function(){
    var socket = io.connect("http://localhost:8080");

  
 

    $("#register-btn").on("click",function(data){
        $("#notice").html("Registerd");
        var name = $("#name").val();
        var password = $("#password").val();
        var confirmPassword = $("#confirm-password").val();

        if (name && (password === confirmPassword)){
                    // user_info event is works.
            socket.emit("user_info",{"name": name,"password": password});
                    // I wonder why  start event does not works.
                    socket.emit("start",{"name": "yahoo"});

        }else{
            $("#notice").html("try again");
        }
    });
});

我不知道为什么 'start' 事件没有被触发。你有什么想法吗?

【问题讨论】:

  • 服务器上没有日志吗,socket.io 很啰嗦

标签: javascript node.js express socket.io


【解决方案1】:

您缺少 Socket.io 的连接部分

// Noticed I removed the var socket = require('....
var io = require("socket.io").listen(server);

io.sockets.on('connection', function (socket) {

   console.log('Client Connected')       

   socket.on("start",function(data){
      console.log("Started");
   });

   socket.on("user_info",function(user_info){
      var self = this;
      var name = user_info.name;
      var password = user_info.password;
      user.name = name;
      user.password = password;
      var data = JSON.stringify({name: name,password: password});
   });

});

您可能想阅读文档@http://socket.io/

【讨论】:

  • 与眼前的问题无关,但require("./models/User"); 实际上并没有做任何事情。它的值需要分配给一个变量或调用一个方法。
猜你喜欢
  • 1970-01-01
  • 2020-11-15
  • 2022-08-17
  • 2021-07-16
  • 2011-12-03
  • 2014-12-06
  • 1970-01-01
  • 2014-05-28
  • 2011-06-24
相关资源
最近更新 更多