- 浏览: 651283 次
- 性别:
- 来自: 成都
最新评论
-
zhima:
楼主还在升级开发吗?还是地址变动了
开源WebSocket服务器项目宝贝鱼CshBBrain V4.0.1 和 V2.0.2发布 -
linxingliang:
你好,我有一个iteye账号也被锁定了,你是通过什么方式联系管 ...
今天由于iteye账号被锁定所有博文不能访问,已解锁 -
独自空楼茉莉为谁而开:
解决啦,仿照你的广播发送写的代码 嘿嘿
开源WebSocket服务器项目 宝贝鱼(CshBBrain)版本发布 -
独自空楼茉莉为谁而开:
小弟有一个问题 我在本地开启两个页面访问后台,后台稍微修改下代 ...
开源WebSocket服务器项目 宝贝鱼(CshBBrain)版本发布 -
spqin:
...
百度地图API详解之地图标注
CshBBrain开发示例
1.服务器定时推送广播消息
服务器每隔10秒钟将服务器的当前时间所对应的毫秒数发送给客户端,客户端接收服务器发送的消息并在网页上显示出来。
1.1 我们创建一个线程来每隔10秒发送一个消息:
protected void startBroadMessage(){// 定时发送广播消息的线程
while(true){
try{
Response rs = new Response();// 创建一个响应消息
String msg = "current datetime of server current datetime of server current datetime of server current datetime of server current datetime of server current datetime of server: " + System.currentTimeMillis();
//System.out.println(msg);
rs.setBody(msg);// 给响应消息设置内容
MasterServer.addBroadMessage(rs);// 将要发送的消息广播出去
broadMessageThread.sleep(10000);// 线程睡眠10秒钟
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
1.2 启动服务器时,启动广播线程:
BroadThread.getInstance();// 创建广播线程
1.3 完整代码:
1.3.1 消息广播线程:
package com.jason.server.ws.biz;
import com.jason.server.Response;
import com.jason.server.MasterServer;
/**
* <li>类型名称:
* <li>说明:
* <li>创建人:CshBBrain;技术博客:http://cshbbrain.iteye.com/
* <li>创建日期:2012-8-24
* <li>修改人:
* <li>修改日期:
*/
public class BroadThread {
private static BroadThread broadThread= new BroadThread();
private Thread broadMessageThread;// 发送广播消息的线程
public static BroadThread getInstance(){
return broadThread;
}
private BroadThread(){
// 消息广播线程
Runnable writeDistributeRunner = new Runnable(){
public void run(){
try{
startBroadMessage();
}catch(Exception e){
e.printStackTrace();
}
}
};
this.broadMessageThread = new Thread(writeDistributeRunner);
this.broadMessageThread.setName("广播消息生成线程");
this.broadMessageThread.start();
}
protected void startBroadMessage(){
while(true){
try{
Response rs = new Response();
String msg = "current datetime of server current datetime of server current datetime of server current datetime of server current datetime of server current datetime of server: " + System.currentTimeMillis();
//System.out.println(msg);
rs.setBody(msg);
MasterServer.addBroadMessage(rs);
broadMessageThread.sleep(10000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
1.3.2 启动消息广播线程
package com.jason.server.ws;
import java.io.IOException;
import com.jason.server.MasterServer;
import com.jason.server.ws.biz.BroadThread;
/**
* <li>类型名称:
* <li>说明:websocket服务器入口类。
* <li>创建人:CshBBrain;技术博客:http://cshbbrain.iteye.com/
* <li>创建日期:2011-11-18
* <li>修改人:
* <li>修改日期:
*/
public class Server{
/**
* <li>方法名:main
* <li>@param args
* <li>返回类型:void
* <li>说明:WebSocket服务器,设置websocketdecoder,websocketProcess,websocketcoder给服务器
* <li>创建人:CshBBrain;技术博客:http://cshbbrain.iteye.com/
* <li>创建日期:2011-11-18
* <li>修改人:
* <li>修改日期:
*/
public static void main(String[] args){
try{
new MasterServer(new WebSocketCoder(), new WebSocketDecoder(), new Processer());
BroadThread.getInstance();
}catch(IOException e){
e.printStackTrace();
}
}
}
2.客户端与服务器相互发送消息
用户在网页上输入一个名字,提交到服务器,服务器回返回"Hello" + 提交的名字。
2.1 重写Service类中的 public Response service(Client sockector, HashMap<String, String> requestData)方法:
public Response service(Client sockector, HashMap<String, String> requestData){
if(requestData == null){
return null;
}
Response responseMessage = null;
try{
if(!MyStringUtil.isBlank(requestData.get(Constants.HANDSHAKE))){
responseMessage = Response.msgOnlyBody(requestData.get(Constants.FILED_MSG));
}else{
responseMessage = Response.msgOnlyBody("Hello," + requestData.get(Constants.FILED_MSG));// 将收到的人名前添加hello问候语
}
}catch(Exception e){
e.printStackTrace();
responseMessage = Response.msgOnlyBody("500处理失败了");
}
return responseMessage;
}
2.2 Service类完整代码:
/**
* <li>文件名:Service.java
* <li>说明:
* <li>创建人:CshBBrain;技术博客:http://cshbbrain.iteye.com/
* <li>创建日期:2011-11-27
* <li>修改人:
* <li>修改日期:
*/
package com.jason.server.ws.biz;
import java.util.HashMap;
import com.jason.server.Client;
import com.jason.server.Response;
import com.jason.util.MyStringUtil;
/**
* <li>类型名称:
* <li>说明:业务处理类
* <li>创建人:CshBBrain;技术博客:http://cshbbrain.iteye.com/
* <li>创建日期:2011-11-27
* <li>修改人:
* <li>修改日期:
*/
public class Service{
private static Service service = new Service();// 服务单实例;// 服务单实例
public static Service getInstance(){
return service;
}
private Service(){}
/**
*
* <li>方法名:service
* <li>@param requestData
* <li>@return
* <li>返回类型:ResponseMessage
* <li>说明:业务处理入口方法,对各种接口的请求进行处理
* <li>创建人:CshBBrain;技术博客:http://cshbbrain.iteye.com/
* <li>创建日期:2011-12-5
* <li>修改人:
* <li>修改日期:
*/
public Response service(Client sockector, HashMap<String, String> requestData){
if(requestData == null){
return null;
}
Response responseMessage = null;
try{
if(!MyStringUtil.isBlank(requestData.get(Constants.HANDSHAKE))){
responseMessage = Response.msgOnlyBody(requestData.get(Constants.FILED_MSG));
}else{
responseMessage = Response.msgOnlyBody("Hello," + requestData.get(Constants.FILED_MSG));
}
}catch(Exception e){
e.printStackTrace();
responseMessage = Response.msgOnlyBody("500处理失败了");
}
return responseMessage;
}
}
2.3 客户端页面代码:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="minimum-scale=1.0,maximum-scale=1,width=device-width,user-scalable=no" />
<title>首页</title>
<!--link rel="stylesheet" type="text/css" media="all" href="css/style.css" /-->
<link rel="stylesheet" type="text/css" media="all and (orientation:portrait)" href="css/style.css" />
<link rel="stylesheet" type="text/css" media="all and (orientation:landscape)" href="css/style_land.css"/>
<script src="js/scrollpic.js" type="text/javascript"></script>
</head>
<body>
<section class="nav">
<div class="subNav">
<div class="slipMarquee" id="stock">
</div>
<div>
<input type="text" id="txt" />
<button value="send" onclick="send();">send</button>
</div>
</div>
</section>
<script language="javascript" type="text/javascript">
window.WebSocket = window.WebSocket || window.MozWebSocket;
var socket = new WebSocket("ws://192.168.1.222:9090/echo"); // 注意这里的ip地址改为你自己的地址,创建sockect客户端
socket.onopen = function(){
//socket.send('i am client');
socket.onclose = function(e){// 关闭连接处理事件
alert('close the socket');
};
socket.onerror = function(msg){// 出错处理事件
alert('error:' + msg );
};
};
socket.onmessage = function(e) {// 收到消息处理事件,将收到的内容以红色显示在页面上
document.getElementById('stock').innerHTML = '<font color =red>' + event.data + '</font>';
};
function send(){// 发送输入的人名
socket.send(document.getElementById('txt').value);
}
</script>
</body>
</html>
评论
responseMessage = Response.msgOnlyBody(requestData.get(Constants.FILED_MSG));
}else{
responseMessage = Response.msgOnlyBody("Hello," + requestData.get(Constants.FILED_MSG));
}
这个方法返回的为什么在浏览器上是“Hello,null”呢?这个是public Response service(Client sockector, HashMap<String, String> requestData){}方法的,求解啊,我在send的数据在后台接收到了,但是在Response.msgOnlyBody("Hello," + requestData.get(Constants.FILED_MSG));返回的时候就是null了,求解啊
发表评论
-
jQuery那些有用的选择方式
2013-01-21 20:02 1013摘自网络: $("[id^=percent]& ... -
基于宝贝鱼(CshBBrain)开发聊天类应用 群发消息的问题
2013-01-12 09:30 2424最近有网友 基于宝贝鱼(CshBBrain)开发聊天类应用 遇 ... -
JS字符串函数
2012-12-15 16:03 1377JS自带函数concat将两个或多个字符的文本组合起来,返回一 ... -
今天由于iteye账号被锁定所有博文不能访问,已解锁
2012-12-04 17:47 1989今天发布了开源WebSocket项目 宝贝鱼 CshBBr ... -
开源WebSocket服务器项目 宝贝鱼(CshBBrain)版本V4.0.2 和 V2.0.3发布
2012-12-04 10:23 2093宝贝鱼 CshBBrain V4.0.2 和 CshBB ... -
开源WebSocket服务器项目 宝贝鱼(CshBBrain) 前台js 框架CshBBrainJS V1.0.0发布(有图有真相)
2012-12-04 09:48 2956为了更好的支持开发基于Websocket的应用,开源Web ... -
基于开源WebSocket服务器宝贝鱼(CshBBrain)的应用横空出世
2012-12-04 10:24 2814开源WebSocket服务器 宝贝鱼(CshBBrain) ... -
HTML事件列表
2012-12-01 10:39 1047一下内容来自网络: 一般事件:onClick HTML ... -
JS编码解码函数
2012-11-23 16:16 1283js 对文字进行编码涉及3个函数:escape,enco ... -
开源WebSocket服务器项目宝贝鱼CshBBrain发布新版本,修复重大广播消息缺陷
2012-11-13 10:16 2742开源WebSocket服务器项目 ... -
开源WebSocket服务器项目宝贝鱼CshBBrain V4.0.1 和 V2.0.2发布
2012-11-13 09:57 2148开源WebSocket服务器项目宝贝鱼CshBBrain ... -
手机界面设计中9种常用的布局
2012-11-12 09:11 2023转自:http://reynold.cn/?p=422 ... -
Web开发者的最爱 5个超实用的HTML5 API
2012-11-09 13:19 1273转自:http://www.csdn.net/article/ ... -
JAVA AIO扫盲和入门
2012-11-05 13:33 9728开源WebSocket服务器 宝贝鱼(CshBBrain) ... -
国内首款基于AIO(异步IO)支持集群的高性能开源WebSocket服务器 宝贝鱼 CshBBrain V4.0 发布
2012-11-05 11:29 3659国内首款基于AIO的开源WebSocket服务器 宝贝鱼 ... -
开源WebSocket服务器项目CshBBrain 中文名:宝贝鱼
2012-11-03 14:38 1764有人叫我给 开源WebSocket服务器项目CshBBrain ... -
开源WebSocket服务器项目CshBBrain V2.0.1发布
2012-11-02 21:22 1639CshBBrain V2.0.1: ... -
高性能I/O设计模式Reactor和Proactor
2012-10-26 17:41 2372转自:http://hi.baidu.com/qhpgb ... -
Proactor和Reactor模式_继续并发系统设计的扫盲
2012-10-26 17:40 3879转自:http://www.cppblog.com/kevin ... -
reactor和proactor模式的比较
2012-10-26 17:38 1679转自:http://blog.163.com/zongyuan ...
相关推荐
TITLE:=A simple Hello, World program for OpenWrt endef define Package/hello-world/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/usr/bin/ endef $(eval $(call ...
在这个"OpenWrt之helloworld程序"中,我们将探讨如何在OpenWrt环境中编写、编译和运行一个简单的 HelloWorld 程序,这将帮助初学者了解OpenWrt的开发流程。 首先,`helloworld` 文件通常是一个C或C++源代码文件,...
在编程世界中,"Hello, World!"程序是一个经典的起点,用于教授新手如何在特定的编程语言中编写并运行他们的第一个程序。这个简单的程序通常只包含一行代码,用于在控制台上打印出 "Hello, World!" 这个字符串。在这...
标题中的"Hello_World.zip_hello world _world"和描述中的"hello world prog for begginer"都指向了一个经典的编程入门示例——“Hello, World!”程序。这个简单的程序是许多编程语言教学的第一课,用于向初学者介绍...
在编程世界中,"Hello, World!" 是每个初学者接触的第一个程序,它标志着编程旅程的开始。本主题将深入探讨如何使用C++语言编写这个经典的 "Hello, World!" 程序,以及C++的基本语法和环境配置。 C++ 是一种强类型...
根据给定的文件信息,我们可以总结出以下关于“汇编语言实现输出HelloWorld”的相关知识点: ### 汇编语言简介 汇编语言是一种低级编程语言,它为每种类型的计算机提供了一对一的机器指令映射。汇编语言程序通常由...
### 深入淺出Hello World —— Hacking HelloWorld (Part I) #### 概述 在《深入淺出Hello World》这一系列文章中,作者Jim Huang(黃敬群/"jserv")通过深入剖析经典的“Hello World”程序,旨在帮助读者理解在...
### JNI入门之HelloWorld(一)详解 #### 一、引言 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码与其他语言写的代码进行交互。JNI接口提供了若干公共服务,并为Java虚拟机和本机应用程序或...
8. **获取Bean**:在程序中,我们可以从`ApplicationContext`获取已定义的Bean,如`HelloWorld helloWorld = context.getBean("helloWorld", HelloWorld.class);`,然后调用其方法进行交互。 9. **运行和测试**:...
hello world java编程
在这个“linux环境下用makefile编译简单的helloworld程序”的主题中,我们将深入理解如何创建并使用`Makefile`来编译一个基本的C或C++程序,例如“helloworld”。 首先,`helloworld`程序是一个经典的入门示例,...
如何创建QT项目之QTcreator输出HelloWorld,小白保姆级别的教程,还有提供参考链接. HelloWorld程序是一个基于Qt框架的简单示例程序,用于展示如何使用Qt进行图形界面编程。这个程序的主要目的是在窗口中显示一个...
本压缩包包含的“一个简单的qt版helloworld程序”是初学者接触Qt编程的一个基础示例,旨在帮助理解Qt的基本语法和项目构建过程。 首先,让我们来理解一下Qt中的"Hello, World!"程序的基本结构。在Qt中,我们通常会...
在编程世界里,"Hello, World!" 是每个初学者的第一个程序,它标志着编程之旅的开始。这个"HelloWorld_"项目正是这样一个入门实例,用于在Visual Studio这个强大的集成开发环境中展示基本的代码编写和运行流程。 ...
《SpringBoot HelloWorld初探》 在当今的Java开发领域,SpringBoot框架因其简化Spring应用的初始搭建以及开发过程而备受青睐。"springboot-helloworld.rar"这个压缩包,显然是一个入门级的示例,旨在帮助开发者快速...
/* Header for class HelloWorld */ #ifndef _Included_HelloWorld #define _Included_HelloWorld #ifdef __cplusplus extern "C" { #endif /* * Class: HelloWorld * Method: sayHello * Signature: ()V */ ...
SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- HelloWorld ---- 代码 SpringMVC ---- Hello...
【Hello World 编程】是编程世界的入门程序,无论你学习的是哪种编程语言,它都是初学者的第一课。这个简单的程序通常在控制台上打印出 "Hello, World!" 这个短语,以此来验证编译环境和基本语法的正确性。它的起源...
Java "Hello, World" 是初学者接触编程时最常见的示例,它展示了如何在Java环境中编写、编译和运行一个简单的程序。这个名为 "java_hello_world源代码工程" 的压缩包文件,显然包含了这样一个基础示例的完整源代码...
"Hello World"是编程世界中的一个经典入门程序,它的存在是为了向初学者展示如何在不同的编程语言中打印出“Hello, World!”这个简单的语句。在这个压缩包中,我们有两个文件:`hello world.cpp` 和 `hello world....