`
CshBBrain
  • 浏览: 649998 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
B7d9bf34-126e-301f-819e-81f2615b5a2a
开源WebSocket服务...
浏览量:144890
Group-logo
HTML5移动开发
浏览量:137830
社区版块
存档分类
最新评论

Hello World for CshBBrain

阅读更多

 

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>

1
1
分享到:
评论
1 楼 hehefan 2014-05-06  
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,null”呢?这个是public Response service(Client sockector, HashMap<String, String> requestData){}方法的,求解啊,我在send的数据在后台接收到了,但是在Response.msgOnlyBody("Hello," + requestData.get(Constants.FILED_MSG));返回的时候就是null了,求解啊

相关推荐

    openwrt可用helloworld程序

    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 程序,这将帮助初学者了解OpenWrt的开发流程。 首先,`helloworld` 文件通常是一个C或C++源代码文件,...

    Helloworld_helloworld_

    在编程世界中,"Hello, World!"程序是一个经典的起点,用于教授新手如何在特定的编程语言中编写并运行他们的第一个程序。这个简单的程序通常只包含一行代码,用于在控制台上打印出 "Hello, World!" 这个字符串。在这...

    Hello_World.zip_hello world _world

    标题中的"Hello_World.zip_hello world _world"和描述中的"hello world prog for begginer"都指向了一个经典的编程入门示例——“Hello, World!”程序。这个简单的程序是许多编程语言教学的第一课,用于向初学者介绍...

    Hello World.rar_c++ hello world_world

    在编程世界中,"Hello, World!" 是每个初学者接触的第一个程序,它标志着编程旅程的开始。本主题将深入探讨如何使用C++语言编写这个经典的 "Hello, World!" 程序,以及C++的基本语法和环境配置。 C++ 是一种强类型...

    汇编语言实现输出helloworld

    根据给定的文件信息,我们可以总结出以下关于“汇编语言实现输出HelloWorld”的相关知识点: ### 汇编语言简介 汇编语言是一种低级编程语言,它为每种类型的计算机提供了一对一的机器指令映射。汇编语言程序通常由...

    深入淺出Hello World ( HackingHelloWorld-PartI)

    ### 深入淺出Hello World —— Hacking HelloWorld (Part I) #### 概述 在《深入淺出Hello World》这一系列文章中,作者Jim Huang(黃敬群/"jserv")通过深入剖析经典的“Hello World”程序,旨在帮助读者理解在...

    JNI入门之HelloWorld(一)

    ### JNI入门之HelloWorld(一)详解 #### 一、引言 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码与其他语言写的代码进行交互。JNI接口提供了若干公共服务,并为Java虚拟机和本机应用程序或...

    Spring4 HelloWorld

    8. **获取Bean**:在程序中,我们可以从`ApplicationContext`获取已定义的Bean,如`HelloWorld helloWorld = context.getBean("helloWorld", HelloWorld.class);`,然后调用其方法进行交互。 9. **运行和测试**:...

    linux环境下用makefile编译简单的helloworld程序

    在这个“linux环境下用makefile编译简单的helloworld程序”的主题中,我们将深入理解如何创建并使用`Makefile`来编译一个基本的C或C++程序,例如“helloworld”。 首先,`helloworld`程序是一个经典的入门示例,...

    1.如何创建QT项目-QTcreator输出HelloWorld

    如何创建QT项目之QTcreator输出HelloWorld,小白保姆级别的教程,还有提供参考链接. HelloWorld程序是一个基于Qt框架的简单示例程序,用于展示如何使用Qt进行图形界面编程。这个程序的主要目的是在窗口中显示一个...

    一个简单的qt版helloworld程序

    本压缩包包含的“一个简单的qt版helloworld程序”是初学者接触Qt编程的一个基础示例,旨在帮助理解Qt的基本语法和项目构建过程。 首先,让我们来理解一下Qt中的"Hello, World!"程序的基本结构。在Qt中,我们通常会...

    HelloWorld_打印HelloWorld_

    在编程世界里,"Hello, World!" 是每个初学者的第一个程序,它标志着编程之旅的开始。这个"HelloWorld_"项目正是这样一个入门实例,用于在Visual Studio这个强大的集成开发环境中展示基本的代码编写和运行流程。 ...

    Java JNI 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 ---- HelloWorld ---- 代码 SpringMVC ---- Hello...

    hello world.jar

    hello world java编程

    各种语言的Helloworld编程

    【Hello World 编程】是编程世界的入门程序,无论你学习的是哪种编程语言,它都是初学者的第一课。这个简单的程序通常在控制台上打印出 "Hello, World!" 这个短语,以此来验证编译环境和基本语法的正确性。它的起源...

    springboot-helloworld.rar

    《SpringBoot HelloWorld初探》 在当今的Java开发领域,SpringBoot框架因其简化Spring应用的初始搭建以及开发过程而备受青睐。"springboot-helloworld.rar"这个压缩包,显然是一个入门级的示例,旨在帮助开发者快速...

    java_hello_world源代码工程.rar

    Java "Hello, World" 是初学者接触编程时最常见的示例,它展示了如何在Java环境中编写、编译和运行一个简单的程序。这个名为 "java_hello_world源代码工程" 的压缩包文件,显然包含了这样一个基础示例的完整源代码...

    hello world .zip_first_hello world _helloworld_world

    "Hello World"是编程世界中的一个经典入门程序,它的存在是为了向初学者展示如何在不同的编程语言中打印出“Hello, World!”这个简单的语句。在这个压缩包中,我们有两个文件:`hello world.cpp` 和 `hello world....

Global site tag (gtag.js) - Google Analytics