package cn.yangg.scala.base.init
import java.io.Closeable
import java.nio.channels.ServerSocketChannel
import java.net.InetSocketAddress
import java.nio.channels.SocketChannel
import java.nio.charset.Charset
import java.nio.ByteBuffer
import akka.actor.Actor
import java.nio.channels.Selector
import java.nio.channels.SelectionKey
import akka.actor.ActorSystem
import akka.actor.Props
case class StartService(port: Int)
class ServerActor extends Actor {
val serverChannel = ServerSocketChannel.open()
valserverSocket =serverChannel.socket()
val selector = Selector.open()
val buffer = ByteBuffer.allocate(1024)
val charset = Charset.forName("UTF-8")
val charDecoder =charset.newDecoder()
def receive = {
case StartService(port) =>
this.serverListenerStart(port)
}
def serverListenerStart(port: Int) = {
serverSocket.bind(new InetSocketAddress(port))
serverChannel.configureBlocking(false)
serverChannel.register(selector, SelectionKey.OP_ACCEPT)
var n =0
while (true) {
n = selector.select()
if (n >0) {
val it =selector.selectedKeys().iterator()
while (it.hasNext()) {
val key =it.next()
it.remove() ////删除已选key,防止重复处理
if (key.isAcceptable()) {
val server =key.channel().asInstanceOf[ServerSocketChannel]
val channel =server.accept()
println(channel)
if (null !=channel) {
channel.configureBlocking(false)
channel.register(selector, SelectionKey.OP_READ)
}
} else if (key.isReadable()) {
val socket =key.channel().asInstanceOf[SocketChannel]
var size: Int =0
println("read data ....." + key)
buffer.clear()
size = socket.read(buffer)
while (size >0) {
buffer.flip()
charDecoder.decode(buffer.asReadOnlyBuffer())
.toString().split("\\.\\.\\.\\.").foreach(println)
buffer.clear()
size = socket.read(buffer)
}
if (size == -1) { //当对端主动关闭后移除key,要不然selector会一直返回可读
socket.close()
selector.selectedKeys().remove(key)
}
}
}
}
}
}
}
class ClientActor extends Actor {
val client = SocketChannel.open()
val buffer = ByteBuffer.allocate(1024)
def receive = {
case StartService(port) =>
clientStart(port)
}
def clientStart(port: Int) {
client.connect(new InetSocketAddress(port))
while (true) {
for (i <-1 to5) {
buffer.clear()
buffer.put(("hello server" +i +"....").getBytes("utf8"))
buffer.flip()
client.write(buffer)
}
Thread.sleep(1000)
println(System.currentTimeMillis() + "message to parent....")
}
}
}
object SocketStart {
def main(args: Array[String]) {
this.akkaSocketTest("socketActor",11111)
}
def akkaSocketTest(actorName: String, port: Int) = {
val actorSystem = ActorSystem(actorName)
val serverActor =actorSystem.actorOf(Props[ServerActor],"serverActor")
val clientActor =actorSystem.actorOf(Props[ClientActor],"clientActor")
val startCMD =new StartService(port)
serverActor !startCMD
clientActor !startCMD
}
}
http://blog.csdn.net/yangguo_2011/article/details/28446807
相关推荐
akka集群,scala函数式编程。
Scala Akka项目源码
响应式架构 消息模式Actor实现与Scala.Akka应用集成 响应式架构 消息模式Actor实现与Scala.Akka应用集成
消息模式Actor实现与Scala、Akka应用集成
用Scala写的。这也不支持scala语言 就写java了 反正都要运行在jvm里面的
Akka scala 并发 actor 高清原版pdf 学习scala实现akka进行并发编程
用Scala写的akka actor简单demo,已经打包成SBT程序,因为上传大小限制依赖包没上传,用户安装了sbt后只需要执行update命令即可
本书循序渐进地介绍了Scala的函数式编程基础,虽然篇幅短小,却切中要害。读者可以学会使用Scala静态语言的强大功能创建简洁、可扩展、高度可并行的代码。对于多核时代JVM上的并发编程,Scala是绝好的工具,而本书是...
SCALA程序设计-JAVA虚拟机多核编程实战
Reactive Programming with Scala and Akka 英文mobi 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
Harness reactive programming to build scalable and fault-tolerant distributed systems using Scala and Akka About This Book Use the concepts of reactive programming to build distributed systems ...
Akka是JAVA虚拟机JVM平台上构建高并发、分布式和容错应用的工具包和运行时。Akka用Scala语言写成,同时提供了Scala和JAVA的开发接口。
博客配套文件,详细演示了在maven中如何混合编译java和scala共存的代码。
响应式架构++消息模式Actor实现与Scala.Akka应用集成+,沃恩·弗农+
响应式架构 消息模式Actor实现与Scala.Akka应用集成 高清扫描版
scala编程 33章 中文pdf Scala编程实战 目录 第1章字符串. 11 第2章数值39 第3章控制结构.60 第4章类和属性.103 第5章方法147 第6章对象170 第7章包和导入.190 第8章特质200 第9章函数式编程214 第10 章集合242 第...
资源名称:Scala程序设计:Java虚拟机多核编程实战资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
《Scala函数式编程》是针对希望学习FP并将它应用于日常编码中的程序员而写的,内容包括:函数式编程的概念;函数式编程相关的各种“为什么”和“怎么做”;如何编写多核程序;练习和检测。 从OOP到FP,思路的转化 ...
2016年2月出版的《Reactive Programming with Scala and Akka》,介绍了使用scala和akka构建响应式程序的相关技术,pdf格式