来自 php 源的 Socket.io

2021-12-25 00:00:00 websocket connection php

我已经使用 socket.io 开发了一个客户端-服务器连接,我很高兴地说它运行良好.问题来了,因为我需要从 php Source (而不是echo html javascript")创建该连接.像一个

I have developed a client-server connection by using socket.io, and i'm happy to say that it works perfectly. The problem comes because I need to create that connection from php Source ( not "echo html javascript" ). Something Like a

$socket = socket.createConectionJS;

我尝试了不同的方法,例如:

I've tried difrerent ways, such as :

  • 从服务器执行代码(使用 spiderMonkey 和 node )
  • 创建一个 phpSocket 并将其连接到 ServerSocket.j(但显然格式不同).或...
  • 最后,我尝试通过 curl 进行发布,我可以访问服务器脚本,但无法打开连接

我认为解决它的唯一方法是通过使用与 de socket.io 类相同的方式创建套接字来模拟 Web 套接字连接,但在 php 中

I'm thinking the only way to resolve it is simulating the web socket connection by creating a socket with the same way as de socket.io class do it but in php

任何 socket.io 专家可以帮忙吗?

Anny socket.io expert could help ?

谢谢!!_

推荐答案

是的,我当时就快速了解了一下.我很幸运已经在 PHP 中构建了一个相当先进的网络抓取库,所以我只是将来自 TamperData(firefox 插件)的 XML 插入其中,并进行了一些调整.

Yeah, I had a quick go at it just then. I'm fortunate to have a fairly advanced web scraping library already built in PHP, so I just plugged the XML from TamperData (firefox plugin), into it, and tweaked a few things.

为了模拟 xhr-polling(我的代理不允许 websockets,无论如何这看起来更简单)...

To emulate xhr-polling (my proxy doesn't allow websockets, and this looked simpler anyway)...

提出请求:

/socket.io/1/?t=1337779479761   

(13377...数字只是一个时间戳,使用 time() 生成它).

(The 13377... number is just a timestamp, use time() to generate it).

应该返回如下内容:

682970926640665221:60:60:websocket,htmlfile,xhr-polling,jsonp-polling

抓住前面的大数字,那就是您的[CONNECT_ID]",您将在本次会议的剩余时间内保留该号码.现在做另一个请求:

Grab the big number at the front out, that's your "[CONNECT_ID]", which you'll keep for the remainder of the session. Now do another request:

/socket.io/1/xhr-polling/[CONNECT_ID]?t=[TIMESTAMP]

你会得到类似 ::1 的东西

And you'll get back something like ::1

就我费心去遵循它而言,这一切看起来都相当基本......没有特殊的标题或任何偷偷摸摸的东西.建议您使用 TamperData 或数据包嗅探器,并自行遵循.这是我的代码的输出:

That's about as far as I bothered to follow it, it all looked fairly basic from there... no special headers or anything sneaky. Suggest you use TamperData or a packet sniffer, and just follow it yourself. Here was the output from my code:

$ php RealTestCurl.php xml/xhr.xml init1 xhr1 xhr1 xhr1 xhr1

xmlFilename: xml/xhr.xml

Step: init1
Reply: 7638339571841585529:60:60:websocket,htmlfile,xhr-polling,jsonp-polling
Found: connect_id: ([0-9]*) - 7638339571841585529

Step: xhr1
Reply: 1::

Step: xhr1
Reply: ?46?5:::{"name":"news","args":[{"hello":"world"}]}?63?5:::{"name":"this","args":[{"will":"be received by everyone"}]}

Step: xhr1
.... there is a massive 20 second timeout here

Step: xhr1
8::

Step: xhr1
8::

在 node.js/socket.io 一侧,运行其首页上的基本示例:

And on the node.js/socket.io side, running on of the basic examples from their front page:

debug - client authorized
info  - handshake authorized 3445861131360107212
debug - setting request GET /socket.io/1/xhr-polling/3445861131360107212?t=1337781185
debug - setting poll timeout
debug - client authorized for 
debug - clearing poll timeout
debug - xhr-polling writing 1::
debug - set close timeout for client 3445861131360107212
debug - websocket writing 5:::{"name":"this","args":[{"will":"be received by everyone"}]}

相关文章