【问题标题】:How does my HTML page have access to socket.io on client-side?我的 HTML 页面如何在客户端访问 socket.io?
【发布时间】:2017-09-20 01:05:46
【问题描述】:

我正在学习 socket.io 聊天教程,到目前为止一切正常。但我不明白客户端如何使用 socket.io 代码:

<!-- Load socket.io client-side -->
<script src="/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>

    $(function (){

        var socket = io();

        $('form').submit(function(){
            socket.emit('chat message', $('#m').val());
            $('#m').val('');
            return false;
        });

        socket.on('chat message', function(msg){
            $('#messages').append($('<li>').text(msg));
        });

    });

所以它是从“/socket.io/socket.io.js”访问它,但我的文件夹中没有那个。我不明白 HTML 网页是如何访问 socket.io.js 文件的。不知道怎么问这个。这个 .js 文件在哪里?

【问题讨论】:

  • 你在看socket.io/get-started/chat上的教程吗?有一句话说:“在开发过程中,socket.io 会自动为我们服务客户端,正如我们将看到的,所以现在我们只需要安装一个模块”。因此,socket.io 似乎为路径/socket.io/socket.io.js 安装了一个处理程序。我没有使用 socket.io 的经验,但我想在生产环境中提供脚本是你的责任。
  • 是的,我确实阅读了那部分,但我仍然对处理程序以及如何或在何处访问 .js 文件感到困惑。是的,这就是教程。
  • 如果我没记错的话,服务客户端脚本在socket.io/lib/index.js:github.com/socketio/socket.io/blob/master/lib/index.js#L101的第101行处理。

标签: html node.js linux socket.io


【解决方案1】:
<script src="/socket.io/socket.io.js"></script>

在上面的脚本文件中,socket.io.js 将在目录 node_modules/socket.io-client 中可用

所以如果你想做类似的事情,

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

然后从 node_modules/socket.io-client/socket.io.js 复制文件 并将其粘贴到您的服务器目录中。

关于如何在客户端连接到服务器的下一个问题,这是您在客户端连接到服务器的编辑代码。

$(function (){

    var socket = io("http://yourserver.com");

    $('form').submit(function(){
        socket.emit('chat message', $('#m').val());
        $('#m').val('');
        return false;
    });

    socket.on('chat message', function(msg){
        $('#messages').append($('<li>').text(msg));
    });

});

在上面的代码中http://yourserver.com是你的节点服务器运行的地址,如果你在本地服务器上离线,那么它可以是这样的,

var socket = io("http://192.168.0.103:3000");

在上面的代码中,3000 是服务器运行的端口,而 192.168.0.103 将替换为您的本地 IP 地址。 希望这会有所帮助。!

【讨论】:

  • 如果您的客户端文件由不同的服务器提供服务,则上述答案用于将客户端连接到服务器,例如您的 index.html 在 apache 服务器上并且您的节点服务器在不同的地址运行。如果您的文件仅由节点服务器提供服务,而不必指定服务器的地址,它将类似于 var socket=io();
  • 我专注于您回答的第一部分,我了解连接的工作原理。我只是好奇客户端如何找到 socket.io javascript 文件: 你说它在 node_modules 中寻找它,但我没有不明白,“node_modules”这个词甚至不在脚本标签的那个 src 属性中的任何地方。它怎么知道在那里寻找它?
  • 实际上我也很困惑它是如何获取该文件的,但有些我是如何弄清楚并找到该文件的,并且在复制该文件后它对我有用
  • 哦,所以您只是将它从 node_modules 复制到与 .html 文件相同的目录中,它有效吗?没问题?
  • 是的,它的工作只是从 .html 文件中更改 src 属性
猜你喜欢
  • 2013-11-22
  • 1970-01-01
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
相关资源
最近更新 更多