Node.js + Socket IO + Apache + PHP 从 url 中删除端口?

Posted

技术标签:

【中文标题】Node.js + Socket IO + Apache + PHP 从 url 中删除端口?【英文标题】:Node.js + Socket IO + Apache + PHP remove port from 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 文件工作的文件夹。另外,我要在我的两个文件中更改什么?我只是快速尝试并出现错误。 (就像我说的,我是新手,所以我不确定一切是如何工作的) 没关系,我搞定了。谢谢。 【参考方案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);没有像你所做的那样指定任何东西是行不通的。

以上是关于Node.js + Socket IO + Apache + PHP 从 url 中删除端口?的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 状态代码 200 但页面未加载 Node.js Socket.io -- 使用 Socket.io 的 Node.js 教程,Daniel Nill,fs.readFile(),socket

Node.js 和 socket.io 的混淆

Node.js socket.io.js 未找到或 io 未定义

找不到Node.js /socket.io/socket.io.js express 4.0

node.js + socket.io:拍卖网站开发

Heroku 上的 socket.io + node.js