241-小黄鸡服务器端完成监听 | 学习笔记

简介: 快速学习241-小黄鸡服务器端完成监听

开发者学堂课程【Scala 核心编程 - 进阶241-小黄鸡服务器端完成监听学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9120


241-小黄鸡服务器端完成监听


内容介绍

一、建包前

二、建包

三、服务器监听


一、建包前

1.先写服务器端的主程序进行监听

找到 Akka0705--src--main--com.atguigu.akka 的位置,在其中新建文件包,命名为 yellowChicken

2.创建协议原因

双方互相通过邮箱发消息时,在本地发送的是字符串,但在网络中,字符串不能直接发,所以需要在双方交流的中间创建协议。

一般来讲,网络通讯最简的方式是用样例类来充当协议,因为样例类本身实现了序列化。

3.创建协议内容

需要创建两个协议

一个是客户端发送给服务器端的协议(协议就是样例类的对象)

一个是服务器端发送给客户端的协议(此处的协议也可以叫做信息)。不直接发送字符串的原因是字符串的描述能力较弱,只能发送“hello”或是abc

当发送的信息包含更复杂的信息如年龄、性别等,此时使用字符串发送,解析十分困难。所以发送时,使用本身实现序列化的样例类对象的形式进行发送,更简单。

4、更多说明

当拥有客户端、服务器端和中间的协议三大块的文件时,即可建包。


二、建包

1.服务端建包

先建立一个名为 server 的 New Package ,专门用于写 server  代码

2.客户端建包

再建立一个名为 yellowchicken.client 的 New Package,用于客户端

3.协议建包

最后建立一个名为 common 的 New Package,用于协议(命名为 common 是因为它的通用性,它在使用时,客户端会用到一份,服务器端也会用到一份)


三、服务器监听

1.写入代码

三个文件包都建成后,在 scala 下建立  YellowChickenServer 写入代码

package com.atguigu.akka.yellowchicken.server

class YellowChickenServer extends Actor{

override def receive:Receive={

}

//Receive 为程序框架图中的 receive 方法

//主程序-入口

Object YellowChickenServer extends App{

//创建 ActorSystem

ActorSystem(“??”)

//“??”是写入的名字,将来若客户端或服务器端持有或得到这个名字,至关重要。

若此名字不匹配,则无法找到。在 actor 中, actor 是一种资源

// 类似于 url  (统一资源定位,是定义在网络上的唯一资源,地位等价于网络上的图片)

//将“??”写入名字,变成以下代码

val serverActorSystem=ActorSystem(“Server”)

//创建 YellowChickenServer 的 actor 返回 actorRef

serverActorSystem.actorOf(Props[YellowChickenServer],YellowChickenServer)val

//因为 YellowChickenServer 是被动者不需要持有引用,被动者可以由 sender 来获取,主动发起行为的主动者才需要持有对方引用。

所以创建 YellowChickenServer( actor 的名字) 的 actor 示例,同时返回它的一个代理,取名为YellowChickenServer(是 serverActorSystem 的名字)Privateval yellowChickenServerRef:ActorRef=serverActorSystem:ActorRef=serverActorSystem.actorOf

(Props[YellowChickenServer],YellowChickenServer)

//因为无法指定 IP 和端口,是传统的方式,单机版本都在本地交互,但现在已经变成了网络版本,所以这串代码需要改进,因此引入了以下模板

2.引入模板

val host = "127.0.0.1" //服务端 IP 地址

val port = 9999

//创建config对象,指定协议类型,监听的ip和端口

val config = ConfigFac tory. parseString(

s”””

akka.actor.provider="akka.remote . RemoteActorRefProvider"

akka . remote . netty. tcp. hostname=$host

akka. remote . netty . tcp. port=$port

""" .stripMargin)

//服务器本身是有 IP 地址的,此处需要把主机和端口放到一个配置中,用 ConfigFactory 去实现

// Actorsystem 有很多的方法,除了直接给一个名字之外,还有一种配置方式(在此配置方式中,如果是网络形式,可直接放入

),

详见以下

defapply (name:String,config):ActorSystem=apply(name,Option(config),None,None)

//所以将 config 引入(此步骤切记不可少), config 类似于叫做类型安全的含义,typesafe.config 则是保证按照需要的网络形式运行

val serverActorSystem=ActorSystem(“Server”,config),如果没有这段代码,则代表本地,有这段代码,则代表一种网络的监听

3.开始启动

yellowChickenServerRef ! start

//先给自己发送一个消息,进行启动。当接收到“start”时,做一个控制,发送“start 小黄鸡客服开始工作了...”此时已经完成了监听任务

Override def recrive:Receive={

Casestart=>println(start 小黄鸡客服开始工作了...”)

}

//开始运行,检查这句话是否被输出,屏幕输出“小黄鸡客服开始工作了...”后,检查监听端口9999是否被监听(输入 netstat -anb:more ),在列表中发现999,则证明端口已然启动。即服务器端口监听任务完成。

4.知识拓展

开始工作后,按流程运行,应该将客户端相连,也可以一次写完(出现一次写完的情况极少,例如将代码全都走过)。但一般来讲,作为一个正常的开发流程,代码是一步一步写的。

相关文章
|
Oracle 关系型数据库 Java
云服务器安装oracle修改IP地址监听器报错问题
当在云服务器中安装oracle时,按照一般的安装步骤安装后,需要修改两个文件的iIP地址才可以在本机进行访问,修改注意点: 监听器部分不要改成服务器的公网IP,要改成服务器的计算机名字才可以,两个配置文件夹均要修改
112 0
|
3月前
|
网络协议
【qt】TCP服务器如何停止监听?
【qt】TCP服务器如何停止监听?
35 0
|
3月前
|
网络协议
【qt】TCP的监听 (设置服务器IP地址和端口号)
【qt】TCP的监听 (设置服务器IP地址和端口号)
207 0
|
5月前
|
Java Android开发
Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。
【6月更文挑战第23天】 Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。客户端连接服务器,发送"Hello, Server!"后关闭。注意Android中需避免主线程进行网络操作。
100 4
|
Java Linux API
Zookeeper学习---3、服务器动态上下线监听案例、ZooKeeper 分布式锁案例、企业面试真题
Zookeeper学习---3、服务器动态上下线监听案例、ZooKeeper 分布式锁案例、企业面试真题
|
JSON 网络协议 Java
【服务器】springboot实现HTTP服务监听
【服务器】springboot实现HTTP服务监听
258 0
zookeeper实现分布式应用系统服务器上下线动态感知程序、监听机制与守护线程
zookeeper实现分布式应用系统服务器上下线动态感知程序、监听机制与守护线程
93 0
|
网络协议
如果希望监听TCP端口9000,服务器端应该怎样创建socket?
如果希望监听TCP端口9000,服务器端应该怎样创建socket?
1055 1
|
域名解析 网络协议 Unix
TCP 编程-服务器监听 | 学习笔记
快速学习 TCP 编程-服务器监听
TCP 编程-服务器监听 | 学习笔记
Zookeeper——服务器动态上下线、客户端动态监听
Zookeeper——服务器动态上下线、客户端动态监听
Zookeeper——服务器动态上下线、客户端动态监听