今天公司有个项目需要个即时聊天的功能,前几天刚好自己写了一个测试过,好用,只不过用的是第三方的api。这次老大要求自己手写。可把我想的。
我们来了解下什么是socket:
百度百科这样说的:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
其实我在php中的理解就是 :就是别人都弄好了,我们直接调用就行。PHP 对socket封装了很多方法,文章末尾大家可以看看。
先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。
注 :服务端运行的时候。请先把超时时间设置为0;不然默认是30秒,30秒以后就结束,到时候就没法测试了。
之前百度 推荐在cmd运行,我的测试过在cmd不行。建议在浏览器运行服务端代码。我是windows
里面的socket_方法都是php自带的。大家看下就懂了。
有些代码是从别人分享的github上获取的。同时感谢原作者,本来想把地址告诉大家的,但是好像头条不允许。
直接上代码
服务端代码:
前端页面代码:
分别在不通的浏览器打开该页面。就出现效果了。
看了别人的代码,磕磕碰碰终于实现了效果。这个只实现了聊天室功能群聊天功能。
最后问个,如何实现像QQ一样实现多组用户一对一聊天了,有的大神请告诉个谢谢。
感觉要创建多个聊天室的样子。带区分的id吗?如何创建?请问