PHP做聊天服务器后台,并发一万,用socket可以么
肯定socket性能高呀
php写服务器没问题的,你看下 workerman-chat,是一个现成的php聊天室框架。普通的php程序肯定不行。
还有个更牛的动态聊天程序,后台也是php写的服务器支撑的。
网站即时通讯功能的实现方法是什么?很多SEO人员为了提高用户体验,会给网站加通讯功能,尤其是电商网站,基本每个网站都有添加客服的咨询功能,对此你知道其中的技术吗?这里就为大家介绍一下网站即时通讯功能的实现方法。
(1)基于XMPP协议的实现
XMPP(可扩展消息处理现场协议)是基于XML的协议,是专为及时通信系统设计的通信协议,用于即时消息以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。著名的开源聊天系统服务器Openfire就是基于XMPP协议的Jabber服务器。
可以通过Flash或ajax与Jabber服务器进行交互,实现webIM的功能,
(2)基于flash的XmlSocket的实现
FlashMediaServer是一个很强大的流媒体服务器,它基于rtmp协议,提供了强壮的流媒体交互功能。在FMS中,提供一种远程共享对象(SharedObject)的机制,客户端可以创建并连接到服务器端的远程共享对象。可以有很多个客户端连接到同一个远程共享对象中,任何一个客户端对共享对象进行了修改,服务器都会将共享对象的修改信息发送给所有其他连接到这个共享对象的客户端。这种远程共享对象的机制可以很方面地实现以下功能:·远程控制幻灯片放映·文字聊天·网络对战·远程选择和播放歌曲·现场拍卖·客户服务应用程序。
远程共享对象很适合用于实现web聊天室中的群聊功能。为每一个群都建立一个远程共享对象,这样的话,任何用户在群上发信息,就可以通过服务器自动发送到所有的群成员。
用远程共享对象来实现单聊是不实际的。对应单聊的实现,我们需要借助socket。客户端通过socket服务器与其他客户端进行私聊。聊天信息通过socket服务器进行转发。
网站即时通讯功能的实现方法是什么?基于flash的XmlSocket的实现的远程共享对象是最有效率的技术手段,如果你对此感兴趣,可以收藏一下这篇文章。
网站不同的实现方式:
实现方式1: 可以将所有的信息都经过服务器中转,比如客户端AClient,客户端BClient,服务器Server,AClient发信息给客户BClient的话,先将接收人(BClient的ID)以及发送的内容全部发送到服务器Server,然后服务器再将这些信息转发给BClient,这样的话谁断开了连接就算别的客户端不知道,那么服务器Server肯定知道,Server再把断开连接的通知转发给接收方。
实现方式2: AClient直接和BClient建立连接,这样AClient那里提前必须有BClient的信息比如有地址,端口什么的,BClient必须也得有AClient的信息,其中可以以发送方为Socket Server,以接收方为Client,这样的前提是发送方AClient的Socket Server必须之前就是开启的,这个方式不好。
实现方式3: AClient,BClient各自开启独立的Socket Server和各自一个Socket Client,也就是发送前对方的Socket Server就是开启的,这样就可以实现两个客户端独立的通信,视频聊天和语音聊天可以这样做,但是要是想让服务器知道,必须再连接到服务器并向服务器发送信息。
其中第一种方式最常用,现在很多基于在线聊天的程序都很少用Socket了,很早前就都用数据库来实现了,比如现在很多基于B/S架构的聊天程序,连数据库都不用,直接就是Session,Application之类的东西,配合一些Ajax的实现。
哈哈,我用自己的语言来说一下
打开英文词霸,发现socket的中文意思是插座的意思。
简言之socket就是:有插座,有插头,有电器(比如电灯)。
插座带电, 插头插入插座以后,就可以把电流通到电器里面去,这时候电灯就可以工作了。
引申一下呢:
插座:相当于服务端程序,他可以向客户(电器)提供资料,任何人只要满足一定条件就可以去服务端取资料(电流);
插头:就是socket,它是一种抽象的东西,也可以理解成一种规范,大家都承诺会尊守这一个规范,比如插头有三脚的,两脚的,四脚的,等等,大小也有规定。只要是插座能接受的就可以插入进去。
电流: 从服务器取下来的资料就可以认为是电流,可以供人参考查询等等。
电器: 我们的客户端程序就是电器,比如IE其实就是客户端程序,QQ也是。我们利用IE,给他指定一个网址,他就会利用HTTP协议去指定的服务器网站取下新闻等资讯给我们看。给我们看的过程需要程序进行分解,如播音乐、放动画等等;
socket的工作过程:
简述一下QQ聊天的工作原理。
假设腾讯公司建立了一个服务器,socketServer 并打开了 5555 这个端口
其实就是给了全中国的人一个插座,并且规定只接收规格是 5555的插头,大家都可以把插头插到腾讯公司的服务器上去取电流;
这时候玩家A 利用客户端 插上去了,于是他与服务器建立了通道。有电流的联系了,并且是双向的,他即可以向服务器取消息,又可以把消息发到服务器。
于是他向服务器发送了一条消息(电流)在消息中说明了想要说的话,并且指明要发给一个叫玩家B的人。
这时候服务器接收了这条消息,暂存。
过了一会儿,玩家B也插上去了插座,并向服务器发送了一条消息,说我上来了。
服务器检测到玩家B正好是之前玩家A要发送的对象,于是通过通道把消息发给了玩家B,这样玩家B就看到了玩家A说的话。
Connection :通道,连接,可以是Socket的。并且可以从中得到InputStream 和OutputStream;
OutputStream: 有了通道就可以以流的形式发送想要发送的东西,比方有了电线才可以把电流传到另一端,在网络中大家传送的都是字节流byte
inputStream: 有了通道就可以以流的形式接收想要收的东西。
现在可以通过OutputStream把想要说的话向服务器发送,通过Socket通道
也可以通过InputStream向服务器索要与自己相关的内容。
明白未?
1可能是在获取客户端的ip和端口时,处理出现问题,导致无法正确发送到客户端。
2客户端是否使用固定的端口来接收服务器信息,或服务器是否正确发送到客户端的相应的端口。
3通过上面分析,最大可能是在处理端口出现问题,请重新检查。
4实在不行,最好使用抛出异常方法来捕获错误消息,或是通过一步一步调试分析数据发送过程。
0条评论