【问题标题】:Node.js + Socket IO + Apache + PHP remove port from url?Node.js + Socket IO + Apache + PHP 从 url 中删除端口?
【发布时间】:2012-01-24 16:23:44
【问题描述】:

我有一些关于在 PHP 中使用 socket IO 等问题,我是 nodejs/socket io 的新手,所以我知道的很少,我在过去几天才开始使用它,我要说到重点了我将在我的网站上实现它(到目前为止,我刚刚构建了一些小测试示例)。

问题:目前我必须将端口添加到我的本地主机才能查看它并让它工作,显然当它是一个实时网站时我不能拥有这个,当我使用 php 时我也不能这样做页面(只是一直在用 html 做例子)如果我为我的套接字 io 服务器使用端口 4000,我必须去:localhost:4000,但是我需要能够去:localhost:8888/mysitefolder(8888 是我的 MAMP、php 和所有东西的端口)我已经看到人们已经解决了这个问题,但我无法让它为我自己工作。

这是我的代码:

聊天.js

 var app = require('express').createServer(), 
      io = require('socket.io').listen(app);

app.listen(4000);


var users = [];

app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});

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

socket.emit('connected');

 socket.on('userID', function (userID) {
users.push(userID);
});  


socket.on('message', function (message) {
socket.broadcast.emit('message-response', { data: message});
});

});

index.html

<title>Testing</title>
<script src="/socket.io/socket.io.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>

function mktime(){
  var newDate = new Date;
  return newDate.getTime();
  }

  function appendMessage(data)
   {
  $("body").append(data+"<br />");  
   }

  var socket = io.connect('http://localhost:4000');
    socket.on('connected', function () {

   //select id from database in real environment
   socket.emit("userID", mktime());

    });



     socket.on('message-response', function (message) {

     appendMessage(message.data);   

});


    $(document).ready(function(){
      $('#input').keypress(function(event) {
        if (event.keyCode != 13) return;
          var msg = $("#input").val();

             if (msg) {


       socket.emit('message', msg );
       appendMessage(msg);

        $("#input").val('').focus();
      }
    });
    });



    </script>

    <body>
    <input type="text" id="input"><br>
    </body>

【问题讨论】:

  • “我需要能够访问:localhost:8888/mysitefolder”是什么意思?您需要做的就是正确引用 js 文件,例如:“localhost:4000/socket.io/socket.io.js”,就是这样。您甚至不需要 Express 服务器,您可以使用 JS 代码提供索引文件。
  • 嗯 localhost:8888 是 MAMP 运行的地方,对于 php 和所有内容,mysitefolder 只是其中用于 php 文件工作的文件夹。另外,我要在我的两个文件中更改什么?我只是快速尝试并出现错误。 (就像我说的,我是新手,所以我不确定一切是如何工作的)
  • 没关系,我搞定了。谢谢。

标签: php jquery apache node.js socket.io


【解决方案1】:

我认为您的意思是您不想在客户端中对端口或 URL 进行硬编码?那正确吗?

在 socket.io 0.8.7 中,您不需要提供它。您可以只使用以下内容,它将被自动检测到

var socket = io.connect();

【讨论】:

  • 嗨,Dylan,我当时收到您的请求了吗?我有一个使用 emit 的工作 socket.io,但我不提供 URL 和端口。我只在服务器端提供端口而不是客户端 - github.com/parj/node-websocket-demo/tree/socket_emit>
  • 这不是我最初的问题,我最初的问题是我认为您必须在 URL 本身中拥有端口,在栏中。我不知道没有它就无法工作的唯一原因是因为它引用了 socket.io 脚本。解决方案正在更改: 为:
  • 我想知道为什么没有其他特定的目录,我读到的所有关于它的东西听起来就像 socket.io 只是神奇地找到了它,哈哈。然而,无论如何。你所做的也不适合我,我必须有这个: var socket = io.connect("localhost", {port: 4000});没有像你所做的那样指定任何东西是行不通的。
猜你喜欢
  • 2018-01-31
  • 2012-03-20
  • 1970-01-01
  • 2017-07-06
  • 2014-07-18
  • 2011-07-04
  • 2012-01-24
  • 2016-04-14
相关资源
最近更新 更多