- 浏览: 264753 次
- 性别:
- 来自: 广州
最新评论
-
ffyyhh995511:
String oldValue = jedis.getSet( ...
Java实现基于Redis的分布式锁 -
guwq2014:
...
Redis及其Sentinel配置项详细说明 -
莫名的拉风:
minisnoopy2u 写道您好,ClassLoader, ...
Javassist实现动态代理 -
minisnoopy2u:
您好,ClassLoader, targetClass, pr ...
Javassist实现动态代理 -
Dream_Trc:
写的不错,感谢分享
Java并发编程之异步Future机制的原理和实现
文章列表
Netty+WebSocket实现简单网页群聊
这两天看了下WebSocket的RFC文档,对WebSocket协议有了基本的认识,顺便写了篇博客做点笔记 WebSocket 协议。
例子说明:每个网页一个websocket连接,点发送消息后,消息会发送给除了自己之外的其它在线的websocket客户端,简单实现群聊
服务端
采用Netty实现,Netty版本是4.1.2.Final.
服务端共有以下4个类:
WebSocketServer实现IHttpService和IWebSocketService,WebSocketServerHandler持 ...
Javassist实现动态代理
动态代理模式简述:之所以会出现代理这种模式就是因为我们常有这么一种需求:在被代理类的方法调用前后执行一些其它的逻辑,这些逻辑不适合由被代理类来实现,那这些逻辑谁来实现?当然是代理类。那代理类是谁?从哪里来?代理类是我们利用字节码生成工具动态创建的,然后利用反射实例化而得到代理对象。
tips:这篇文章讲的不是动态代理模式的思想而是怎么实现(简单实现)一个和java.lang.reflect.Proxy类相似的类。
按照JDK动态代理的套路来,先定义一个InvocationHandler来给客户端添加代理的逻辑(这个类和JDK中的一模一样) ...
WebSocket 协议
WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。在这之前都是客户端主动请求服务端,一请求一应答,很多时候实现消息更新都是采用ajax轮询,有延迟,有了WebSocket双方都可以 ...
Java 获取当前JVM进程ID
public static final int jvmPid() {
try {
RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();
Field jvm = runtime.getClass().getDeclaredField("jvm");
jvm.setAccessible(true);
VMManagement mgmt = (VMManagement) jvm.get(runtime);
Method pi ...
Java NIO时间服务
这篇文章内容是另一篇文章《Java 实现基于Redis的分布式锁》的分支.
时间服务包括客户端和服务端, 服务端监听请求 ,若是时间请求,则返回当前服务器的时间, 各个客户端(分布式锁) 都从给服务器获取时间,已达到全局时间一致。
共三个类 TimeServer、 TimeClient和TimeClientException,下面是源码:
TimeServer.java:
package cc.lixiaohui.lock.time.nio.server;
import java.io.IOException;
import ...
Linux SSH公钥认证配置
ssh支持两种认证方式:密码认证和公钥认证。若没有配置公钥认证,则每次ssh连接时都需要输入密码,不仅麻烦而且还不安全,因此推荐配置公钥认证,只需在配置时输入一次密码,之后ssh连接就无需输 ...
Linux下用expect实现ssh自动登录并执行脚本
expect不是系统自带的,需要安装:
yum install expect
装完后才可执行以下脚本。
ssh密码认证的登陆脚本:
#!/bin/bash
# 匹配提示符
CMD_PROMPT="\](\$|#)"
# 要执行 ...
Java 原始数据类型
Java共7种原始类型
类型
占用字节
默认值
取值范围
boolean
4
false
false,true
byte
1
0
-2^7 ~ 2^7-1
short
2
0
-2^15 ~ 2^15-1
int
4
0
-2^31 ~ 2^31-1
long
8
0
-2^63 ~ 2^63-1
float
4
0
-2^128 ~ 2^127
double
8
0
-2^1024 ~ 2^1023
1. 为什么boolean是4个字节?boolean ...
Http协议格式
一、请求报文
包括请求行、请求头和请求数据,具体格式如下:
请求方法:
GET: 请求指定的页面信息,并返回实体主体。 HEAD: 只请求页面的首部。 POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。 PUT: 从客户端向服务器传送的数据取代指定的文档的内容。 DELETE: 请求服务器删除指定的页面。 OPTIONS: 允许客户端查看服务器的性能。 TRACE: 请求服务器在响应中的实体主体部分返回所 ...
Socket Options
以下出现中文的地方并不是对英文的翻译
1. SO_TIMEOUT
单位是毫秒,表示等待客戶端连接的最长时间。
Set a timeout on blocking Socket operations:
ServerSocket.accept();
SocketInputStream.read();
DatagramSocket.receive();
With this option set to a non-zero timeout, a call to accep ...
Java实现组件的生命周期
假如你在写平台或者一个比较大的项目,总会设计到多个模块,模块有大有小,往往模块之前是嵌入式(embbed)的,即小模块由大模块来管理,外层模块控制着里层模块。这时我们为这些组件设 ...
API笔记之java.nio.channels.Selector
import java.io.Closeable;
import java.io.IOException;
import java.nio.channels.spi.SelectorProvider;
import java.util.Set;
/**
*
* A multiplexor of {@link SelectableChannel} objects.
* <pre>
* Selector
* ...
API笔记之java.nio.channels.SelectionKey
import java.nio.channels.SelectableChannel;
import java.nio.channels.Selector;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
/**
* A token representing the registration of a {@link SelectableChannel} with a
* {@link Selector}.
* ...
Java并发编程之CyclicBarrier的使用
先看javadoc对这个类的说明:A synchronization aid that allows a set of threads to all wait for each other to reach a common barrier point. CyclicBarriers are useful in programs involving a fixed sized party of threads that must occasionally wait for each other. The barrier is call ...
ActiveMQ入门示例一
- 博客分类:
- JMS
ActiveMQ入门示例
ActiveMQ有两种模式,点对点和发布/订阅模式,点对点中消息只能被一个消费者消费,而发布订阅中,消息可以被一群消费者消费,很好理解。下面的例子是点对点的
安装ActiveMQ很简单就不说了,客户端使用API只需添加以下依赖:
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.9.1</version& ...