【问题标题】:Socket.io is not communicating with online html page on a ServerSocket.io 未与服务器上的在线 html 页面通信
【发布时间】:2014-12-11 22:17:22
【问题描述】:

我的 node.js 服务器在我的本地机器(Windows)上运行和通信。但是当我复制我的项目并尝试在我的在线服务器(Linux)上运行它时,socket.io 不会从服务器到客户端(html 页面)进行通信。我没有收到任何错误,并且 socket.io 已安装在服务器上。 目录是/var/www/lynx.html

我如何引导服务器与客户端通信,以及客户端与服务器连接。我尝试将http:\\localhost 更改为各种类型的东西,例如实际 IP 地址和本地 127.0.0.1

这是我的代码的重要部分。

客户

<script type="text/javascript">
    var socket = io.connect('http://localhost');
    socket.on('message', function(message){        
        var obj = jQuery.parseJSON(message);
        var htmlStr =''; 

服务器

    var dgram = require("dgram");
    var udpResultsServer = dgram.createSocket("udp4");
    var udpTimeServer = dgram.createSocket("udp4");
    var http = require('http');
    var io = require('socket.io');

    var htmlPage;
    var jsonResults;
    var tempResults = '';
    var finalResults = '';
    var time = '0.0';
    var r = new Array();

    /*  
    ************************************
    ** Get Ip Addresses               **
    ************************************
    */
    function getIP(){
        var os = require( 'os' );
        var networkConfig = os.networkInterfaces( );    
        var ipList ='';    
        for (var name in networkConfig) {
            networks = networkConfig[name];    
            for (var name in networks) {        
                details = networks[name];       
                if (details['family'] == "IPv4"){    
                    ipList = ipList + details['address'] + " ";
                }
            }
        }
        return ipList;
    }


    /*  
    ************************************
    ** Web server and sockets.io       **
    ************************************
    */
    var htmlPage;

    // read html file to serve
    fs.readFile('lynx.html', function(error, data){
        if (error){
            throw error;
        }
        else{
            htmlPage = data;
            console.log('Server wrote to lynx.html file');
        }
    });

    // start web server 
    var htmlServer = http.createServer(function(request, response) {
        response.writeHeader(200, {"Content-Type": "text/html"});
        console.log('Client Connected ....');
        response.end(htmlPage);

    });
    htmlServer.listen(8000,'127.0.0.1');
    console.log("HTML server started on: " + getIP());

    // start up socket.io for transmitting data to the web page
    var serv_io = io.listen(htmlServer, { log: false });
    serv_io.sockets.on('connection', function(socket){
        //send data to client
        setInterval(function(){
            jsonResults = JSON.stringify(r);        // convert final array into a json string
            socket.send(jsonResults);               // sent json results via socket
            console.log('send <--> receive');
        }, 1000);
    });

这些是我在正在处理的驱动器中本地安装 Socket.io 时出现的错误,这会导致错误吗?

我也全局安装了它 -g 并且没有错误。

 npm WARN package.json fs@0.0.2 fs is also the name of a node core module.
 npm WARN package.json fs@0.0.2 No description
 npm WARN package.json fs@0.0.2 No repository field.
 npm WARN package.json net@1.0.2 net is also the name of a node core module.
 npm WARN package.json net@1.0.2 'repositories' (plural) Not supported. Please pick one as the        'repository' field
 npm WARN package.json has-binary-data@0.1.5 No repository field.
 socket.io@1.2.1 node_modules/socket.io
 âââ debug@0.7.4
 âââ has-binary-data@0.1.3 (isarray@0.0.1)

【问题讨论】:

    标签: linux node.js socket.io client-server


    【解决方案1】:

    如果您的服务器与加载网页的主机和端口相同,那么您应该可以在客户端中执行此操作:

    var socket = io();
    

    它会选择与加载网页时相同的主机/端口,并与之建立 socket.io 连接。


    如果您的 socket.io 服务器与网页不在同一主机/端口上,那么您可能会遇到一些需要解决的跨源问题。

    【讨论】:

    • 我已经尝试过了,但并没有解决问题。我可以搜索什么?
    • @rage12345 - 您可以在浏览器错误控制台和调试器的网络选项卡中查看客户端发生的情况。您应该能够看到初始 http 请求离开客户端以启动 socket.io 连接,然后您可以看到您得到了什么样的响应。正常的 socket.io 连接从几个 http 请求开始,然后双方同意将协议切换到 webSocket 协议,然后 Chrome 调试器在 webSocket 子选项卡中显示进一步的通信。
    • @rage12345 - 请参阅this answer,了解您通常应该在调试器的网络选项卡中看到的用于建立 socket.io 连接的内容。
    • 我遇到了与您向我展示的类似的错误,但我不知道哪里出错了。我承认我是这个 node.js 和 socket.io 的新手。我必须将其更改为以下才能显示脚本。 &lt;script src="http://localhost:8000/socket.io/socket.io.js"&gt;&lt;/script&gt;
    • 我在 /var/www/ 工作的驱动器中全局和本地安装了 Socket.io,但是当我在 /var/www 上本地安装它时,我将在上面显示一些警告。那有关系吗?它是从 users/lib/... 或 var/www/ 中提取的
    猜你喜欢
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2016-08-20
    • 2011-08-18
    • 1970-01-01
    • 2012-05-13
    • 2011-03-01
    相关资源
    最近更新 更多