做java QQ聊天室的时候,多个客户端怎么通过服务器进行交互?
把服务器看成是文件中转站就行了,从客户端接收消息,再转发到目标客户端。
source
<->
server
<=>
destination
首先不要管安卓端还是苹果端,现在一般都是响应式的app,你放到安卓或者苹果或者pc或者平板都是没有问题的。一般采用的是http接口通讯,或者socket连接。具体你要去查资料找Demo了。而且现在主流是采用html5开发或者混合开发了。所以最好是服务器提供appAPI接口,通过http访问服务器,获取数据,数据一般是json,或者xml,拿到后解析数据就可以了,然后再用UI框架或者其他框架或者自定义的UI封装下格式很漂亮了,至于cookie和session等,看你的习惯,网络验证和签名那些也自己看习惯,如果涉及到大数据,还需要引入第三方框架的,直接引入就可以了,不过推荐自己写,防止侵权。都是很通用的。
C/S模式和B/S各有其有点也各有其缺点,B/S模式在开发中需要考虑数据如何从客户端提交到服务器端,数据又如何返回到客户端,这些是B/S模式所特有的,在去年之前,开发B/S模式的程序,我都是利用form来交互数据,当我看到XML之后,发现XML是个好冬冬,有很多优点,有好的东西当然不能独享啦,想当年为了实现XML交互数据,几乎把网络翻了个遍。咚,一块砖头上来了。呵呵,废话少说,下面我们就进入正题。
B/S模式分为服务器端和客户端,客户端接受用户的请求,客户端向应用服务提出请求,应用服务从数据库服务中获得数据,应用服务将数据进行计算并将结果提交给客户端,客户端将结果呈现给用户。这样,我们就看到了数据从客户到服务器,经过服务器的处理再返回到客户端,由客户端软件(如IE)显示结果。
(以ASP教本语言为例,其它的语言一样哈。)
1.Form方式
Form方式是最基本的向服务器提交数据的方式。
testasp文件代码:
<%@ Language=VBScript %>
<%
ResponseExpires=-1
ResponseCharSet="UTF-8"
SessionCodePage="65001"
%>
<form name="frmTest" id="frmTest" action="testasp" method="POST">
<input name="name" id=" name" type="text" value="">
<input type="hidden" name="number" id="number" value="10">
<input type="submit" value="Submit" name="B1">
</form>
<%
dim intnumber
dim strname
if IsEmpty(Request("name")) then
strname =""
else
strname =Request("name")
end if
if IsEmpty(Request("number")) then
intnumber =0
else
intnumber =Request("number")
end if
1、服务端监听一个端口,其它客户端都通过这个端口和服务端进行通信。
2、每个客户端连接上来,服务端给其一个标识ID。然后向其它所有客户端广播一下有新客户端接入,ID多少。
3、客户端要向客户端发送消息,可以以消息包的形式发送,就是把目的客户端的标识和发送的内容组成一个数据包发往服务器,服务器读取就知道要向哪 个客户端发送数据,然后把内容往目的客户端通道发送
客户端交互技术介绍
随着网络应用的不断丰富,客户端交互技术也如雨后春笋一般,遍地开花。正是这些技术的支持,我们的互联网世界变得更加丰富多彩。总体来看,目前的客户端交互技术主要分为如下几大类别:
microsoft系列: ActiveX, Silverlight
java系列:Java Applet,RCP(RAP,GWT),JavaFX
Adobe系列: flash(flex),ActionScript,air
html系列: ajax(异步IO),html5
1 microsoft系列
1)ActiveX 这个在10年前是非常流行的。当时的控件很单一。很多复杂的业务就 被封装成一个个ActiveX控件。但这个有几个问题,1是只有IE才支持,其他浏览器现在有的虽然号称支持了,但和IE原生态环境相比,也只能说是有了,效果还是有区别的。2是需要数字签名。但是IE的安全级别又是可以设置的,所以安全漏洞百出。只能说想法是好的,效果反而成为鸡肋了。
2)Silverlight
Silverlight是Microsoft提供的一个跨浏览器的、跨平台的插件,为Web带来良好的多媒体体验和丰富的交互式应用程序体验。基于NET平台。现在可以基于浏览器,也可以独立运行。
主要基于以下2大技术:
XAML(可扩展应用程序标记语言)--展示UI layout
WPF(WindowsPresentation Foundation)--用户界面框架
Silverlight播出视频及动画的效果很好,支持硬件加速
Silverlight支持windows 和IOS,支持ie和firefox,safari等。
Silverlight没有了像activex的安全的问题,也支持SEO。网站开发者还是比较偏爱的。
Silverlight控件丰富,并支持第三方和自定义控件。
2 java系列
1)Java Applet:是网页上的java程序。用awt作为图形库。含有Applet的网页的HTML文件代码中部带有这样一对标记,当支持Java的网络浏览器遇到这对标记时,就将下载相应的小应用程序代码并在本地计算机上执行该Applet。之前的google编程大赛平台就是用这个做的。要运行javaapplet,首先要装java虚拟机,然后第一次使用时,下载applet也需要一定时间。现在使用的不多了,只有在过去开发的一些企业内部管理系统中还能看见。
2)RCP。这里指的RCP是专门指Eclipse RCP。RCP提供了丰富的界面控件,这使得基于 Java 开发桌面应用也变得容易了很多。RCP 充分发挥了插件化系统的优势, 是基于 OSGi 构建插件化系统的最佳实践。Eclipse RCP项目用SWT图形库和工具包取代了Java标准中的AWT和Swing。SWT直接调用了操作系统的图形库,从而使得Java应用程序的LOOK & Feel 与操作系统的习惯完全一致;更为重要的是,对本地方法的直接调用大幅度的提高了基于SWT 的Java应用程序的运行速度。当然SWT也有先天的不足,它不是标准的java控件库,市场占有率不高,同时在ios上的性能表现也不佳,只是在windows上尚可。
RAP(Eclipse Rich AjaxPlatform):RAP 允许开发人员使用丰富的 Java 库和Eclipse API 构建基于浏览器的 Ajax 应用程序。RAP 主要运行在服务器上。由于 RAP 运行在服务器上,因此允许您访问丰富的 Java API 并允许通过 OSGi 使用著名的Eclipse 插件模型。RAP 版与 RCP 版的主要差别在于插件依赖性(RAP 插件)和应用程序入口点(IEntryPoint)。
GWT (GoogleWeb Toolkit)允许使用 Java 来编写富 Internet 应用程序的代码。GWT 运行在客户机上。GWT 类似一个web的 SWT 应用程序。
3)JavaFX:JavaFX将成为Java平台上主流的图形用户界面开发库。但是在富客户端领域,由于有其他3大系列的竞争,市场份额占有还是很少,未来难以估计。在组件的外观方面,一套图形用户界面库JavaFX20也采用了更加流行的做法,即用CSS来定义应用的外观。JavaFX20也引入了界面描述语言FXMLJavaFX 20开始使用了java作为开发语言而不是之前的`JavaFX script 在以后的开发中,AWT和Swing应该会逐渐淡出桌面应用开发的视野。 JavaFX能发挥作用的一个地方应该是在企业内部系统中。
3 Adobe系列:
1)flash(flex):Flash的编程模型是基于时间轴的,Flex的则是基于窗体。一个服务于设计师,一个服务于开发人员。
2)ActionScript:开发 flash或者flex的编程脚本语言。
3) Adobe Air是利用Adobe公司的Flash技术开发的视频播放平台。比较熟悉的例子:sina 微博 air。
优点: 1)跨平台(跨操作系统,跨浏览器) 2)技术门槛降低:只需要有web开发技术3)可以脱机运行,偶尔连接网络4)基于flash的用户体验更好
缺点: 1)用户体验和交互操作比桌面应用还有不足,并且很多应用需要安装桌面应用才行。2)需要安装虚拟机
4html系列
1)ajax
这个是目前的主流。Web20的基础。该技术使得网页实现异步的局部更新。市面上的所有的浏览器都支持。主流流行的js框架也都为止进行了封装。在流媒体处理上还有不足。
异步IO—是针对同步IO而言,增强client和server交互性的socket连接手段。经常使用在各种分布式、即时通信和中间件系统中。是一种高效,且扩展性很强的通信架构。
2)Html5,是未来的趋势。在浏览器层面解决客户端交互,而不是之前说的3类,通过插件的方式来增强交互。它支持多设备跨平台。
Html5主要包括了一些新增的ui控件,如多媒体播放器webplayer,canvas等;增加了websoket的支持,这个是对异步IO的根本性的颠覆;增加webwork,舍得高性能计算和页面展示可以线程分离,不影响用户体验;增加了css3支持,展现式样上对3D效果更加支持。Html5通过history特性甚至解决了ajax不能修改URL这个先天不足。在云时代渐渐向我们走进的时候,Html5将代表了未来。当然,所有的这些需要通过市场的洗礼,一一落地。
总而言之,客户端交互技术是在不断的向前的。不为别的,只因为它在互联网时代将带给使用者更真实的用户体验。
;最简单的模式就是,
客户端接收键盘,鼠标等的消息,然后发送个服务器。
服务器收到这些消息后,发送给其他(指定或者所有的)客户端
就像你在WEB聊天室聊天一样。首先键盘输入了一大堆文字。然后按下“递交”按钮,于是客户端收集你填写的那些文字内容,然后发送给服务器。(也许里面有些色情暴力的字眼)
服务器在接收的这些消息后,发送给其他用户。(服务器可能和谐掉那些色情暴力的字眼,变成了XXOO)
网络游戏的客户端和服务器也是一样的道理
客户端纪录所有的消息指令,一般来说,如果该消息指令可能影响到其他人的,或者需要被其他人看到,这个消息就会需要被发送到服务器。
服务器处理这些消息进行处理,发送给其他相关的客户端。
直白点来说,服务器端与客户端分别处理哪些事情?你是老板,你说了算。
android客户端和服务器端是基于IntentService的,具体如下:
后台使用简单的servlet,支持GET或POST。这个servlet最终返回给前台一个字符串flag,值是true或false,表示登录是否成功。
然后在安卓的ADT上创建一个安卓项目,建立两个Activity,分别作为登录界面和登录成功界面。
HTTP的访问公共类,用于处理GET和POST请求。
IntentService服务,用于在后台以队列方式处理耗时操作。
在AndroidManifestxml中注册IntentService。注意uses-permission节点,为程序开启访问网络的权限。
登陆界面处理,注意按钮监听事件中,使用Intent将要传递的值传给service。接收广播类中,同样使用Intent将要传递的值传给下一个Activity。在onCreate()中,动态注册接收广播类的实例receiver。在接收广播类中,不要使用完毕后忘记注销接收器,否则会报一个Are you missing a call to unregisterReceiver() 的异常。
0条评论