- 浏览: 194788 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (101)
- 职业 (4)
- 生活 (3)
- 场景应用 (6)
- flex (14)
- java (31)
- php (2)
- python (2)
- hadoop (6)
- 项目管理 (1)
- 工作流 (4)
- 手机web应用 (3)
- 算法 (4)
- 小技巧 (1)
- 数据库 (2)
- sphinx (1)
- web综合 (15)
- spring (5)
- 设计 (9)
- javascript (3)
- linux (2)
- 报表 (2)
- delphi (1)
- ejb (1)
- 架构 (3)
- uml (3)
- lucene (2)
- BI (1)
- 多线程 (1)
- 地图 (1)
- gis (1)
- 网络基础 (1)
- spark (2)
- 分布式 (3)
- ext (1)
- android (3)
- arduino (1)
- 协同办公 (2)
- OA流程 (2)
- 畅想 (1)
- ios (3)
- swift (1)
- webkit (1)
- c (1)
- 浏览器 (1)
- html5 (2)
- rtmp (1)
- soket (1)
- AI (2)
- tensorflow (1)
- ignite (1)
- react (4)
- 新空间 (2)
- 闲话 (3)
- docker (1)
- kubernetes (1)
最新评论
-
wenzhiyinghen:
...
spark 学习 -
zlbdexiaohao:
flex 写的时钟 -
minn84:
luoguohong88 写道你上传的那个openi.zip ...
openi1.3 eclipse 整合调试 -
luoguohong88:
你上传的那个openi.zip (5.5 MB)有问题 能再上 ...
openi1.3 eclipse 整合调试 -
minn84:
demo的思路很简单,主要是两点:1.hadoop负责处理数据 ...
hadoop+lucene+web 综合小demo
package com.event;
import java.util.Map;
public interface EventListener {
void onEvent(Map event);
}
package com.socket;
import java.nio.ByteBuffer;
import java.util.HashMap;
import com.event.EventListener;
/*
* 预处理类
*/
public class BaseObject {
private boolean flag;
private ByteBuffer receivebuffer= ByteBuffer.allocate(20000);
public void print(){
System.out.println("hello!");
flag=true;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public ByteBuffer getReceivebuffer() {
return receivebuffer;
}
public void invoke(EventListener event){
System.out.println("BaseObject invoke");
HashMap<String, String> map=new HashMap<String, String>();
map.put("key", "wellcome here");
event.onEvent(map);
}
}
package com.socket;
public class Client{
/*
* 对应的远程客户端
*/
public Client(){
}
public void run( ) {
System.out.println("client run");
}
}
package com.socket;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
public class Server {
private ServerSocketChannel channel;
private SocketController sc;
public Server() {
try {
sc = new SocketController();
sc.start();
channel = ServerSocketChannel.open();
channel.socket().bind(new InetSocketAddress(8080));
} catch (IOException e) {
e.printStackTrace();
}
}
private void start() {
try {
while (true) {
try {
SocketChannel socket = channel.accept();
socket.configureBlocking(false);
sc.registerSocket(socket);
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Server().start();
}
}
package com.socket;
import java.nio.channels.SocketChannel;
public class SocketConnector {
private SocketChannel socket;
private Object attachment;
public SocketConnector(SocketChannel socket,Object attachment){
this.socket=socket;
this.attachment=attachment;
}
public SocketChannel getSocket() {
return socket;
}
public void setSocket(SocketChannel socket){
this.socket=socket;
}
public Object getAttachment() {
return attachment;
}
public void attach(Object attach){
this.attachment=attach;
}
}
package com.socket;
import java.io.IOException;
import java.nio.channels.SocketChannel;
import java.util.ArrayList;
import java.util.Map;
import com.event.EventListener;
/*
* 模拟selector的简单处理类
*/
public class SocketController extends Thread {
private ArrayList<SocketConnector> clients;
private ArrayList<SocketConnector> oldClients;
private ArrayList<SocketConnector> newClients;
private boolean change;
public static Object sync;
public SocketController() {
clients = new ArrayList<SocketConnector>();
oldClients = new ArrayList<SocketConnector>();
newClients = new ArrayList<SocketConnector>();
change = false;
sync = new Object();
}
public void run() {
while (true) {
if (change) {
synchronized (sync) {
clients.removeAll(oldClients);
clients.addAll(newClients);
newClients.clear();
oldClients.clear();
change = false;
}
}
for (int i = 0; i < clients.size(); i++) {
final SocketConnector sc = clients.get(i);
Object obj = sc.getAttachment();
final SocketChannel socket = sc.getSocket();
if (obj instanceof BaseObject) {
BaseObject bo = (BaseObject) obj;
if (!bo.isFlag()) {
bo.print();
} else {
try {
socket.read(bo.getReceivebuffer());
// 加入处理逻辑
bo.getReceivebuffer().clear();
bo.invoke(new EventListener() {
@Override
public void onEvent(Map event) {
System.out.println("invoke return:"
+ event.get("key"));
// 预处理通过,则生成对应的客户端类
Client client = new Client();
sc.attach(client);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}
if (obj instanceof Client) {
Client client = (Client) obj;
client.run();
}
}
try {
Thread.sleep(15);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void registerSocket(SocketChannel socket) {
BaseObject hsp = new BaseObject();
SocketConnector sc = new SocketConnector(socket, hsp);
synchronized (sync) {
newClients.add(sc);
change = true;
}
}
public void unRegisterSocket(SocketConnector sc){
synchronized (sync) {
oldClients.add(sc);
change = true;
}
}
}
import java.util.Map;
public interface EventListener {
void onEvent(Map event);
}
package com.socket;
import java.nio.ByteBuffer;
import java.util.HashMap;
import com.event.EventListener;
/*
* 预处理类
*/
public class BaseObject {
private boolean flag;
private ByteBuffer receivebuffer= ByteBuffer.allocate(20000);
public void print(){
System.out.println("hello!");
flag=true;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public ByteBuffer getReceivebuffer() {
return receivebuffer;
}
public void invoke(EventListener event){
System.out.println("BaseObject invoke");
HashMap<String, String> map=new HashMap<String, String>();
map.put("key", "wellcome here");
event.onEvent(map);
}
}
package com.socket;
public class Client{
/*
* 对应的远程客户端
*/
public Client(){
}
public void run( ) {
System.out.println("client run");
}
}
package com.socket;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
public class Server {
private ServerSocketChannel channel;
private SocketController sc;
public Server() {
try {
sc = new SocketController();
sc.start();
channel = ServerSocketChannel.open();
channel.socket().bind(new InetSocketAddress(8080));
} catch (IOException e) {
e.printStackTrace();
}
}
private void start() {
try {
while (true) {
try {
SocketChannel socket = channel.accept();
socket.configureBlocking(false);
sc.registerSocket(socket);
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Server().start();
}
}
package com.socket;
import java.nio.channels.SocketChannel;
public class SocketConnector {
private SocketChannel socket;
private Object attachment;
public SocketConnector(SocketChannel socket,Object attachment){
this.socket=socket;
this.attachment=attachment;
}
public SocketChannel getSocket() {
return socket;
}
public void setSocket(SocketChannel socket){
this.socket=socket;
}
public Object getAttachment() {
return attachment;
}
public void attach(Object attach){
this.attachment=attach;
}
}
package com.socket;
import java.io.IOException;
import java.nio.channels.SocketChannel;
import java.util.ArrayList;
import java.util.Map;
import com.event.EventListener;
/*
* 模拟selector的简单处理类
*/
public class SocketController extends Thread {
private ArrayList<SocketConnector> clients;
private ArrayList<SocketConnector> oldClients;
private ArrayList<SocketConnector> newClients;
private boolean change;
public static Object sync;
public SocketController() {
clients = new ArrayList<SocketConnector>();
oldClients = new ArrayList<SocketConnector>();
newClients = new ArrayList<SocketConnector>();
change = false;
sync = new Object();
}
public void run() {
while (true) {
if (change) {
synchronized (sync) {
clients.removeAll(oldClients);
clients.addAll(newClients);
newClients.clear();
oldClients.clear();
change = false;
}
}
for (int i = 0; i < clients.size(); i++) {
final SocketConnector sc = clients.get(i);
Object obj = sc.getAttachment();
final SocketChannel socket = sc.getSocket();
if (obj instanceof BaseObject) {
BaseObject bo = (BaseObject) obj;
if (!bo.isFlag()) {
bo.print();
} else {
try {
socket.read(bo.getReceivebuffer());
// 加入处理逻辑
bo.getReceivebuffer().clear();
bo.invoke(new EventListener() {
@Override
public void onEvent(Map event) {
System.out.println("invoke return:"
+ event.get("key"));
// 预处理通过,则生成对应的客户端类
Client client = new Client();
sc.attach(client);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}
if (obj instanceof Client) {
Client client = (Client) obj;
client.run();
}
}
try {
Thread.sleep(15);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void registerSocket(SocketChannel socket) {
BaseObject hsp = new BaseObject();
SocketConnector sc = new SocketConnector(socket, hsp);
synchronized (sync) {
newClients.add(sc);
change = true;
}
}
public void unRegisterSocket(SocketConnector sc){
synchronized (sync) {
oldClients.add(sc);
change = true;
}
}
}
发表评论
-
多语言版基础管理系统展示[es6版]-入门配置篇
2018-10-26 07:17 516新增一篇入门配置文档 原文地址: http://www.i8 ... -
多语言版基础管理系统展示[es6版] -流程配置效果
2017-12-17 19:42 704终于找到一个可以较好展示工作流程配置的 ... -
多语言版基础管理系统展示[es6版]-简单整合spring+tensorflow+ignite+hadoop
2017-08-05 18:14 8121.整合基于[多语言版基础管理系统展示[es6版] ] ... -
多语言版基础管理系统展示[es6版]-简单整合tensorflow
2017-05-03 19:48 1002在大数据和AI渐渐兴起的时候,这是一个关于大 ... -
基于html5的websocket和rtmp协议的java socket服务器
2016-12-07 07:20 1055现代企事业单位中,会涉及到数据推送和获取服 ... -
多语言版基础管理系统展示[flash版]-hadoop+spark+spring简单整合
2016-06-18 21:36 4279本demo基于多语言版基础管理系统展示[fl ... -
ios简单的增删查例子
2015-02-23 16:08 834本例子分为两 ... -
spark 学习
2013-05-18 00:13 19168spark,又一个传说中的分布式实现,详情:ht ... -
基于rtmp协议的java多线程服务器
2013-03-31 21:34 3835打算设计这个半开源服务的计划已经有很长时间了,大 ... -
矩阵算法实现修改
2013-03-23 00:10 1000前段时间因为项目需要,需要实现一个据说是某高 ... -
hadoop+lucene+web 综合小demo
2013-03-02 01:28 13707很长一段时间没有关注hadoop,突然间有兴致,于是动手又 ... -
ejb3.x 简单小 demo
2012-02-21 21:07 1160本demo适合有一定编程经验的自学者 ,简单易懂,涉及数据 ... -
java综合
2012-02-11 22:00 1426以下自定义的简单类中,分析涉及的基础知识 / ... -
java nio应用 aes字符串加密与解密
2010-08-18 22:36 1958import java.io.IOException; imp ... -
java excel内容转换为键/值对基本通用方法与数据库导入
2010-06-01 23:28 1680有时候我们需要从execel中导入大量的数据,编程过程中就遇到 ... -
简单servlet socket 整合
2010-05-05 21:52 4337package filter; import java.io ... -
java写的简单生成sql语句的工具方法
2010-04-20 23:02 3427jdbc编程中,最麻烦的是拼sql语句,尤其是字段太多的时候, ... -
基于rtmp协议用java nio写小型游戏服务器的总结3
2010-03-05 20:59 2152在flex使用rtmp协议进行连接的时候,有个握手的过程,详情 ... -
基于rtmp协议用java nio写小型游戏服务器的总结2
2010-03-04 21:41 2271今天介绍一下学习rtmp的过程,首先当然是baidu和goog ... -
基于rtmp协议用java nio写小型游戏服务器的总结1
2010-03-03 22:55 2483前一阵子,进了一家公司,工作的内容是写基于rtmp协议的jav ...
相关推荐
java侧起server(NioUdpServer1.java),基于Java Nio的selector 阻塞等候,一个android app(NioUdpClient1文件夹)和一个java程序(UI.java)作为两个client分别向该server发数据,server收到后分别打印收到的消息...
java selector 测试并发.多线程并发。
java nio中selector选择器的使用说明文档
java NIO Selector选择器简介.pdf
NULL 博文链接:https://goon.iteye.com/blog/1775421
NULL 博文链接:https://flym.iteye.com/blog/392373
Java_NIO类库Selector机制解析 ,很详细 有兴趣可以下载看看。
Java_NIO类库Selector机制解析.docJava_NIO类库Selector机制解析.docJava_NIO类库Selector机制解析.docJava_NIO类库Selector机制解析.doc
主要介绍了Java NIO Selector用法,结合实例形式分析了Java NIO Selector基本功能、原理与使用方法,并结合了多人聊天室实例加以详细说明,需要的朋友可以参考下
JavaNIO库Selector机制解析.docx
主要介绍了JAVA代码设置selector不同状态下的背景颜色,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
NULL 博文链接:https://flym.iteye.com/blog/392350
java api之Selector基础、应用场景、实战讲解
Selector
Java-NIO之Selector.doc
Java Selector是Red Hat替代品的前端,可用于在已安装的Java版本之间进行切换。
Java_NIO类库Selector机制解析
selector.java
本代码是基于JAVA技术NIO流的选择器Selector的多人聊天室,实现了多个客户端之间的聊天,拥有java窗体、画板等。
在插件使用方面,file_selector插件可以方便地实现文件选择功能,支持多选和所有类型的文件,并且在选择文件后可以获取到文件的路径和其他信息。 在使用file_selector插件时,需要注意以下几点: 在Android系统中...