节点JS通过套接字进行通信

时间:2014-02-17 18:45:54

标签: html5 node.js websocket

我试图玩套接字。我在节点中创建了一个Web服务器:

var http = require("http");
var server = http.createServer(function(req,res){
console.log("server has been created");
res.writeHead(200,{"Content-type:": "text/plain"});
res.end("Welcome to my supa' nodejs app");

}).listen(1337);

console.log("Server running at 127.0.0.1:1337");



 var io = require("socket.io").listen(server);
 io.sockets.on("connection", function(socket){
    socket.on("input_written",function(){
        console.log("someone clicked the button");
    });


 });

我还有一个html文件:

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html lang="en">
    <head>
        <title>Home page</title>


    </head>
    <body>
        <script src="/socket.io/socket.io.js"></script>
        <script>
                    var socket = io.connect("http://localhost:1337");
            function clickedButton()
            {


            socket.on("connect",function(){
                socket.emit("input_written");
            });


            }
        </script>
        <button type="button" onclick="clickedButton()">Click me</button>


    </body>

</html>

我想要实现的是当我按下该按钮时,我的控制台会记录并且有人点击按钮&#34;。但是目前没有任何事情发生。我不确定我错过了什么

更新 正如@Zub推荐我添加了

console.log("clicked");

在socket.emit()之前; 我检查了控制台,这是输出:

    Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost/socket.io/socket.io.js
Uncaught ReferenceError: io is not defined (index):11
Uncaught TypeError: Cannot call method 'on' of undefined 

2 个答案:

答案 0 :(得分:1)

由于您在1337上绑定节点服务器,因此在加载socket.io.js脚本时必须指向该端口。

所以尝试替换

<script src="/socket.io/socket.io.js"></script>

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

修改

您还应该在clickedButton函数之外初始化客户端socket.io连接,并在其中只保留socket.emit("input_written");

答案 1 :(得分:0)

浏览器中的网址需要与套接字连接网址匹配。您的io.connect中有localhost,因此请确保浏览器中的网址为http://localhost/。如果您在浏览器中连接到http://127.0.0.1/,则无法使用。