其实这个问题你应该先想一下socket到底是一个什么东西,在网络编程中socket到底用来做什么的。socket:在操作系统内核中它代表网络连接的一个端点(endpoint),在应用程序中它代表一个打开的文件。socket pair唯一确定的一条网络连接,socket pair就是客户端socket和服务端socket的一个组合。也就是客户端ip和port与服务端ip和port的组合。一条网络连接也就是一条通信的信道,tcp连接代表的信道是全双工的。以信道来讲,逻辑上就存在两个管道来代表输出与输入来发送和接收信息。
成都做网站、网站制作、成都外贸网站建设,成都做网站公司-成都创新互联已向千余家企业提供了,网站设计,网站制作,网络营销等服务!设计与技术结合,多年网站推广经验,合理的价格为您打造企业品质网站。
那么在应用程序上我们就可以拿到这2个管道来完成socket之间的通信。
以你的应用来看输出流fos就代表着图中的红色管道,那么在服务端就应该是这个样的。
Scoket connSock = serverSocket.accept();//connSock代表着服务端的Socket
InputStream is = connSock.getInputStream();//输入流is代表图中的红色管道
OutputStrea os = connSock.getOutputStream();//输出流os代表图中的绿色管道
在服务端有一个字节缓冲区来存放从is读取的字节数据
byte[] buffer = new byte[1024];
然后服务端读取数据来填充这个字节缓冲区
is.read(buffer);//比如这样
然后就根据你的需求来操作这个buffer了。
然后把处理过后的数据通过os发送给客户端。os就是图中的那个绿色管道
os.write(处理过后的数据);
一人轮一次,每人画一次图,在右边打上你猜的是什么,(有提示)最快猜对奖励最多,最后你可以评价别人画的怎么样,可以用鸡蛋,拖鞋等砸,也可以用鲜花。结束以后谁猜得准,快,画得好。就是第一名。
上面这个不知你看没有!就是简单的你画我猜!不知是不是你需要的!
利用题主所述的架构,最简单直接的方式是,用js在作者页面写一个定时任务,每0.1秒(时间间隔自定义,合适就好)向后台发送一个请求(利用AJAX来发请求),请求参数就是作者作画的数据(当然还有这剧游戏的唯一标识),然后spring后台接收请求,向mysql数据库中写入数据。然后在答者页面每0.1秒向后台发送请求(AJAX发送),spring后台接收到请求后,在数据库里根据游戏唯一标识 ,查到目前这局游戏的作画数据,然后返回response,相应参数就是作者作画数据。答者页面的AJAX异步请求回调函数中,对成功返回的请求做出处理,局部刷新HTML页面元素。
WebSocket只不过是一种新的轮子,没有这玩意儿的时候,人们处理这种问题通常有两种方式 1、直接用Socket;2、使用HTTP轮询;上述解决办法就是最简单的HTTP轮询。
上面描述的实现方案还不完整,不过大致思路是这样。