Java中的推送
来源:互联网 发布:买家淘宝怎么刷心快 编辑:程序博客网 时间:2024/05/21 17:27
在一般的B/S程序中(最典型的是web服务)工作的方式是客户端(brower)向服务器端(server)发送一个请求服务器端响应这个请求并发回客户端所请求的数据在这个过程中服务器端扮演的是一个被动响应的角色一般的情况下服务器端是不会主动向客户端写数据的由于HTTP是一个无连接的协议也就是说当服务器端完成对客户端的响应后双方的连接就断开了直到下一次客户端发出请求时再重新建立连接这样的HTTP协议是节省网络资源的但是也给我们带来了一些麻烦比如客户端不能实时探查服务器端的数据变化不能作出及时的响应所以当我们在做一些需要客户端和服务器端互相响应的程序时(比如聊天室web短信息)不得不在客户端不停的刷新页面以求获得最新的数据这样做增加的服务器的负担如果服务器能在数据发生变化的时候主动向客户端写数据那么问题就解决了这就是所谓的推技术
在java中客户端主动向服务器端申请数据叫做拉服务器主动向客户端写数据叫做推我们可以在服务器端打开某个端口监听客户端的连接就可以向客户端随意写数据这是我们做C/S程序的原理推技术采用相同的原理只是客户端是浏览器而已只要我们按照浏览器能够识别的格式向客户端写数据客户端就可以通过HTTP与服务器建立连接并获得数据
HTTP是一个很庞大的协议但是我们只需要用到很小一部分最重要的是要知道按照什么格式写数据浏览器才认识当我们浏览一个网站的某一页比如
wwwsohucom/pagehtm的时候我们是在向服务器发送这样一个信息
GET /pagehtm HTTP/
From: someuser@somehostcom
UserAgent: Mozilla/ (compatible; MSIE ; Windows NT ; DigExt)
空行
其中第一行是我们要关注的它由空格分隔成三部分一是请求的方法(get)二 是请求的页面三是HTTP的版本如果请求无误服务器将返回如下信息
HTTP/ OK
Date: Thu Oct :: GMT
ContentType: text/html
ContentLength:
<html>
<body>
<h>Hello world!</h>
(其他内容)
</body>
</html>
第一行表示连接成果然后是返回数据的属性从开始才是返回给浏览器返回的数据在我们自己的程序中只需要按照上述格式写数据就可以实现一个自己的简易web服务器下面是一个helloworld的例子
import javaio*; import javanet*; public class myServer { static ServerSocket server=null; static OutputStreamWriter ow=null; public static void main(String args[]) { int port=; try { server=new ServerSocket(port); }catch(Exception e) { Systemoutprintln(e); }while(true) { try { Socket socket=serveraccept(); ow=new OutputStreamWriter(socketgetOutputStream()); owwrite(HTTP/ ok ); owwrite(ContentType:text/html ); owwrite(); owwrite(helloworld); owwrite(); owflush(); socketclose(); }catch(Exception e) { Systemoutprintln(e); } } } }
运行java myServer
然后打开浏览器输入http://localhost:8080将会返回一个helloworld
以上就是一个推技术的简单实现将它扩展一下比如加入多线程响应就可以实现无刷新的聊天室
- Java中的推送
- Java 极光推送分组推送
- Android中的消息推送
- Android中的消息推送
- Android中的消息推送
- iOS中的推送
- Android中的消息推送
- Android中的消息推送
- WinPhone中的消息推送
- ios中的推送通知
- App推送java服务端_小米推送
- App推送java服务端_jpush激光推送
- 极光推送-JAVA服务器端推送代码
- 用GoEasy推送实现Java实时推送
- Java调用极光推送推送消息
- IOS 推送 + java 服务端
- java web 后台推送
- 苹果推送(JAVA)
- C语言运算符
- Symmetric Order
- 解决ListView 显示切换定位到指定索引,因为视图重绘导致的界面闪动,使界面过渡更平滑
- Android wifi 连接问题
- shell中单引号、双引号、反引号的使用
- Java中的推送
- IE下判断IE版本的语句...[if lte IE 6]……[endif]
- 2.6内核基于NetFilter处理框架修改TCP数据包实现访问控制
- 解决uboot编译问题__aeabi_uidivmod'和o `__aeabi_uidiv'没定义的错误
- 设计模式 - 抽象工厂模式(abstract factory pattern) 详解
- C++primer Plus 第六版 编程练习3.7.1
- 51单片机定时器详解
- 智力题
- 有关“双重检查锁定失效”的说明