PHP socket客户端通信长连接问题

aility 2011-04-07 11:17:05
各位大侠:

最近做一个项目用到php 采用socket通信,连接一个服务端程序, 然后在一个页面,根据服务端发送过来的消息对页面进行刷新。

需要一直保持该socket连接,然后每间隔1秒,不停的获取信息,然后处理。

本来这次用了sajax 异步刷新, 但是每次刷新时,都重新调用了我的socket初始化部分(登录等各个步骤,)而不是仅仅recv一次消息, 有就显示,无就不处理。

各位朋友,有什么好的方法和建议,非常感谢。
...全文
3316 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
剑心永远OK 2013-12-02
  • 打赏
  • 举报
回复
long polling nodejs + stock.io websocket 不知道是不是你想要的
jdgdf566 2013-12-01
  • 打赏
  • 举报
回复
告诉你答案:chrome的比较新的版本有了websocket,其它浏览器不支持。只能借助flash。
海参崴 2013-11-27
  • 打赏
  • 举报
回复
了解下swoole扩展吧。www.swoole.com
wan274739577 2011-10-13
  • 打赏
  • 举报
回复
只能把php 做成一个服务,把php改为在cli方式去运行,做成长连接一样,绑定代理服务器,用scoket 侦听端口 方式。实现中间层C++跟php之间的通信就可以了。
al 想实现的功能正是我现在想做的。这里有一个php scoket的解决方案,咱们一起研究。QQ:274739577
http://www.laruence.com/2009/06/11/930.html
aility 2011-04-08
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 amani11 的回复:]
1#给出的答案很好了

用flash的socket,与服务端通信,客户端结合js静态刷新页面就好了
[/Quote]
有没有这方面的实例,flash确实也不懂
amani11 2011-04-08
  • 打赏
  • 举报
回复
1#给出的答案很好了

用flash的socket,与服务端通信,客户端结合js静态刷新页面就好了
fxs_2008 2011-04-08
  • 打赏
  • 举报
回复
客户端请求一个php,php不关闭,php只找开socket一次,然后每分种读取一次socket并输出
fxs_2008 2011-04-08
  • 打赏
  • 举报
回复
简单地说,只要这个php进程不关闭,你可以循环取数据并输出
aility 2011-04-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 falizixun2 的回复:]
能不能不用socket,直接在前端每秒发送一次请求?对C++服务端不太清楚。不知道这里能否处理!comet好象也是能达到效果的!
[/Quote]

因为消息是即时的,如果隔一段时间去取,可能在这个间隔的时间,部分消息已经被丢弃了,目前还不能考虑用数据库来保存,因为消息太多了,并且是即时的,过时的消息对后面可能已经没有意义了,因为后面新的消息可能已经又到来了
aility 2011-04-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 boojs 的回复:]
引用 9 楼 snmr_com 的回复:

我也是“知道”而已,嘿嘿,不比你多很多
server push说白了就是一个协议头,浏览器支持这个协议
这个协议最初由网景作出(不知道是否mozilla提出的),反正网景、火狐支持,现在的ie能否支持不清楚(以前不行)

google“php "server push"”很多的
旧文章 http://bbs3.chinaunix.net/a……
[/Quote]

BooJS
兄弟说的对,我就是这个需求,可惜没找到好的解决方案
aility 2011-04-07
  • 打赏
  • 举报
回复
现在就是要做成BS模型的, CS模型的我已经在sh下测试没问题了
foolbirdflyfirst 2011-04-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 aility 的回复:]

现在是要求用php实现客户端与服务端通信,并在页面上刷新显示出来. flash暂时先不考虑,不知道能否实现
[/Quote]
php本身是没问题,问题在于模型,c/s当然是没问题,你可以随意在网上找到php socket client + php socket server在cli下运行的例子.但是换成b/s,那就成问题了。
aility 2011-04-07
  • 打赏
  • 举报
回复
现在是要求用php实现客户端与服务端通信,并在页面上刷新显示出来. flash暂时先不考虑,不知道能否实现
foolbirdflyfirst 2011-04-07
  • 打赏
  • 举报
回复
目前可以通过借助flash作为socket客户端hold住socket connet.
Html5推出了WebSocket,需要浏览器配套支持。
kaifadi 2011-04-07
  • 打赏
  • 举报
回复
能不能不用socket,直接在前端每秒发送一次请求?对C++服务端不太清楚。不知道这里能否处理!comet好象也是能达到效果的!
BooJS 2011-04-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 snmr_com 的回复:]

我也是“知道”而已,嘿嘿,不比你多很多
server push说白了就是一个协议头,浏览器支持这个协议
这个协议最初由网景作出(不知道是否mozilla提出的),反正网景、火狐支持,现在的ie能否支持不清楚(以前不行)

google“php "server push"”很多的
旧文章 http://bbs3.chinaunix.net/archiver/tid-35735.html
……
[/Quote]
基本都是基于http的,http是基于tcp,而lz现在是要基于tcp在浏览器进行监听,收发。
BooJS 2011-04-07
  • 打赏
  • 举报
回复
浏览器帮我们做了
与web http服务器tcp三次握手 -> http请求 -> 返回http
而lz是想
与socket server(默认tcp协议) -> 一直监听socket server+端口 -> 期间socket请求/socket返回 -> 关闭socket client.
不一样的模型。
html5的WebSocket可以做到。可惜SB ie还不支持。
ImN1 2011-04-07
  • 打赏
  • 举报
回复
我也是“知道”而已,嘿嘿,不比你多很多
server push说白了就是一个协议头,浏览器支持这个协议
这个协议最初由网景作出(不知道是否mozilla提出的),反正网景、火狐支持,现在的ie能否支持不清楚(以前不行)

google“php "server push"”很多的
旧文章 http://bbs3.chinaunix.net/archiver/tid-35735.html
这个貌似也是旧文新发 http://www.oeedu.com/contents/1176/9017.html

这个也是说长连接,新点(说ie支持),但从头到尾我都没看到server push技术
http://hi.baidu.com/zomew/blog/item/3cfd09eb43097235b90e2d66.html
aility 2011-04-07
  • 打赏
  • 举报
回复
server push保持php到浏览器的连接.也找了很多这方面的资料,都是只言片语,没有看到可参考的。
snmr_com有没有好的实例介绍一下。最好简单一些,便于理解整个流程,及思路

另外用flash来进行socket交互,并且根据消息对页面进行更新,有这方面的资料介绍一下,谢谢了

没接触过flash.
ImN1 2011-04-07
  • 打赏
  • 举报
回复
我不懂php socket,下面说错了别见笑

你的需求其实不仅仅是b/s,应该是b/s/s,php应该只是个中间件
php-C++的长连接应该问题不大,问题是ajax到php的请求结束,php的运行也结束了(php-C++连接也就结束了)

你应该重新考虑php到浏览器的连接方式,ajax无疑是client pull,
php属于你完全控制,而且只有一个客户端(就是本地浏览器,不会太耗资源),这时你不妨考虑server push保持php到浏览器的连接
加载更多回复(2)

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧