导航:首页 > IDC知识 > scala游戏服务器

scala游戏服务器

发布时间:2021-02-07 18:52:43

1、scala 适合做 服务器api么

Scala相对于Java的优势是巨大的。熟悉Scala之后再看Java代码,有种读汇编的感觉…… 如果仅仅版是写Spark应用,权并非一定要学Scala,可以直接用Spark的Java API或Python API。但因为语言上的差异,用Java开发Spark应用要罗嗦许多。

2、手机游戏服务器端用node.js 还是用go,fibjs之类等比较好

好玩的游戏超多啊,每个时期吊炸天的游戏都不一样,毕竟手游很快红起来,又很快没人玩了,每个人的口味都不一样,比较实用的还是推荐给你这样一个手游排行榜,这个是18183手游排行榜,里面包含2个大榜单,18183新游期待榜和18183热门手游榜,亲可以依据具体情况去选择,这里每天都更新,现在最多人玩的游戏一看就知道了,选起来也方便,给你地址 http://top.18183.com/?=wd还有一个对应的,直接拿礼包,亲可以看看http://ka.18183.com/list_game_2188.shtml

3、在linux上如何配置spark环境,在linux上安装scala和spark老是失败

方法/步骤

首先你的机器安装了jdk,我的新机器,所以早上刚在centos上折腾了jdk,没有的也可以去参考下
下载安装包
scala-2.11.4.tgz
spark-1.2.0-bin-hadoop2.4.tgz
后面的包忘了之前哪找的了,需要的可以私我。将包传到服务器,解压
tar zxvf scala-2.11.4.tgz
tar zxvf spark-1.2.0-bin-hadoop2.4.tgz

配置环境变量
vim /etc/profile
加上以下对应内容:
export JAVA_HOME=/home/yy/jdk1.8
export SCALA_HOME=/home/yy/scala
export SPARK_HOME=/home/yy/spark-1.2.0-bin-hadoop2.4
export PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin
执行source /etc/profile使配置生效

修改spark配置
进入spark-1.2.0-bin-hadoop2.4/conf
复制模板文件:
cp spark-env.sh.template spark-env.sh
cp slaves.template slaves

编辑spark-env.sh
添加上你的对应信息:
export JAVA_HOME=/home/yy/jdk1.8
export SCALA_HOME=/home/yy/scala
export SPARK_MASTER_IP=172.20.0.204
export SPARK_WORKER_MEMORY=2g
export HADOOP_CONF_DIR=/home/yy/spark-1.2.0-bin-hadoop2.4/conf

编辑slaves
添加上你的对应信息,所有的集群的机器:
172.20.0.204
172.20.0.205

到此为止,前面所有的安装配置动作,在你的另一个机器上(所有的slave机器)同样的做一遍,即我这里的205机器

进入spark-1.2.0-bin-hadoop2.4/sbin/目录
执行:./start-all.sh
如果没有设置ssh免密码登陆,会要求输入密码
这时候jps查看多了个master和worker

浏览器查看集群信息
master地址+8080端口

启动Running Applications
在bin目录下执行:
MASTER=spark://172.20.0.204:7077 ./spark-shell
这时候就可以看到运行的app啦

同时可以查看jobs内容

slave机器上也运行app,这时候就可以看到运行的applications有两个啦。

好了,环境就算先搭起来啦,后面就是去调用吧。

http://jingyan.baidu.com/article/7e440953308f122fc0e2ef81.html

4、如何配置 scala + maven + eclipse

1.安装maven插件
安装插件有好几种方法,一种是在help->Eclipse marketplace 查找,另一种是在help->Install New Software,地址为:http://download.eclipse.org/technology/m2e/releases/
说明:网上也有人说因为eclipse是最新版,可能你下的m2e插件不稳定,导致在Install New SoftWare的时候安装不了。查看jboss的官方博客,已经有新版的m2e插件出现在marketplace中。
一般来说,都是调用外部的settings.xml文件,这个时候就需要在window->preferences->maven->user settings选择你本地的文件。
2.安装scala插件
打开http://scala-ide.org/download/current.html,你会看到适合eclipse各种版本的scala插件下载地址,适合indigo的地址是:http://download.scala-ide.org/releases-29/stable/site
3.安装jetty插件
maven项目比较推崇jetty服务器,在eclipse里用命令运行,平时能查看源码,但是debug的时候,会导致找不到maven 仓库里的源码(不知道大家有没有遇到过类似的问题)。
解决办法:安装jetty插件,在help->Eclipse Marketplace 输入jetty,安装下,之后debug就能解决这个问题的。这样会有另一个问题的发生,因为在pom里配置jetty插件需要配置系统变量如下:
<systemProperties>
<systemProperty>
<name>CONFIG_DIR_PATH</name>
<value>${basedir}/config</value>
</systemProperty>
</systemProperties>
这样用命令行:mvn jetty:run 就可以读到系统变量,但是用eclipse jetty插件就会导致找不到CONFIG_DIR_PATH。

5、Visual Studio 对 F#的支持真的好过 IntelliJ 对 Scala 的支持吗

不觉得哦,我们用Intellij的Scala已经完成好几个工业级项目了,而且是回纯Scala开发的;但是VS的F#更像是插件,除了WebSharper,还是收答费很贵的,望而却步。而且Windows平台的服务器端部署的确很好资源那。

6、Java Groovy,Scala 的未来会怎样

Scala有两个流派:FP和Better Java。

FP派喜欢scalaz,喜欢shapeless,喜欢type level programming。这一派特点是程序高度抽象但可读性奇差。适合PL研究者验证概念,适合业余项目自嗨,也适合学习PL概念。不适合多人协作的工程项目。

Better Java派以前之所以存在,单纯是因为Java语法设计太烂,烂到无法忍受。而JVM上当时也没有其它更好的选择。那些告诉你“写了n年Java以后,我切换到Scala,现在每天都活在幸福中”的人,基本都是这一派。

但Scala
as a better Java的工程性也不好,因为特性太多太复杂,除非有高手带队,否则很难只用到它“better
java”的那个子集。解决一个问题的同时,往往引入更多的问题。所以会有Java8发布以后Linkedin所有新项目全部回归Java这种事情。

Groovy是动态语言,工程性比Scala还差。但是因为有Gradle这种被广泛采用的项目,所以会存活下去。但是请记住爱因斯坦曾经说过:

“任何超过两百行的新项目,都不应该采用动态语言开发,无论是Ruby,Python,Perl,Groovy还是Clojure”。

哦,对了,也不要用Clojure。因为它是动态语言,而且是Lisp系的动态语言。“Lisp系”意味着,读书的时候可以靠它开眼界。毕业工作以后,对于这一类语言,能躲多远就躲多远。


刚发布的Kotlin看上去靠谱。它不讲究FP有多纯,目标就一个:“a better
java”。Kotlin在“到底引入多少FP特性”上面做得恰到好处。 看到Kotlin,我马上就想起了这个演讲:“Please stop
polluting our imperative languages with pure concepts”。

Kotlin有以下好处:
1. 强大的IDE。而且是JetBrains第一方支持,不是3年更新一次的第三方插件;
2. 库多生态强。Kotlin的设计者非常重视和Java的互操作,所以Kotlin号称可以无缝衔接所有Java库。
3. 宇宙第一运行时:JVM。
4. Android上不能用Java8的新语法,Kotlin恰逢其时的出现,抓了一波完美的timing。如果Kotlin依靠Android开发爆发,那服务器端,大数据界,也会收益,最后多面开花,势不可挡。

但是Kotlin刚出来,到底有没有它自称的那么好用还待观察。另外,Kotlin社区现在集中力量攻坚Android,在服务器和大数据方向没什么靠谱项目。所以还是得用Java8。

总之,“魔镜啊魔镜,谁是JVM上最好的语言”之最后决战,将是Java10 vs Kotlin(Java9在语法特性上已经输了)。而在这场最终决战之前,C#已经靠着CoreCLR统一世界了。

7、scala 交互模式 代码怎么提示

Scala提供了很多学习材料帮助你学习核心语言内容,有很多在线的教程、示例和项目可以去研究。但是提供的最重要的一个工具是交互模式(REPL)。REPL是一个交互式解释器,可以即时编译、运行代码并返回结果。假定你已经在机器上装好了Scala,也设置了正确的路径,那么在命令行下运行scala命令就可以启动Scala REPL。启动Scala REPL后屏幕上会输出如下内容:

后面的代码示例中,我会用scala>提示这是输入到REPL的内容。接下来的一行是REPL的输出。我们在REPL里快速做几个例子,看看会得到什么输出。

你应该注意到了在我们输入解释器的每个语句后,它会输出一行信息,类似res0: java.lang.String = Hello。输出的第一部分是REPL给表达式起的变量名。在这几个例子里,REPL为每个表达式定义了一个新变量(res0到res3)。输出的第二部分(:后面的部分)是表达式的静态类型。第一个例子的类型是java.lang.String,最后一个例子的类型则是scala.util.matching.Regex。输出的最后一部分是表达式求值后的结果的字符串化显示。一般是对结果调用toString方法得到的输出,JVM给所有的类都定义了toString方法。

图2.1 REPL的返回值

如你所见,REPL是一种测试Scala语言及其类型系统的强有力手段。不仅如此,大部分构建工具都提供了机制让你能加载当前工程的classpath,然后启动REPL。这意味着你可以在REPL里访问工程中引用的库和你自己的代码。你能够在REPL里调用API和访问远端服务器。这是很棒的快速测试Web服务或REST API的方法,也导向我称为实验驱动开发(Experiment Driven Development)的方法。

2.1.1 实验驱动开发

实验驱动开发就是开发者在写测试或生产代码前,先花点时间在交互环境或REPL里做实验。这可以给你时间全面理解你需要打交道的软件或库的外部接口,并对其API的优点和缺点得到点切身体会。这是学习新发布的Web服务或RESTful API或最新的Apache库的极好办法,甚至可以用来学习你同事刚刚写出来的东西。在理解了API是怎么工作后,你就能更好地写自己的代码,或者开始写测试,如果你遵循测试驱动开发的话。

现在推动开发人员拥抱测试驱动开发(TDD)的呼声很高。TDD要求开发者先写单元测试,然后写实现类。在你开始写测试前,你并不总是很清楚自己的API要定义成什么样的。TDD的一个组成部分就是通过写测试来定义API,这样你可以在(用户的)上下文里来看你的代码,可以感觉一下你自己愿意不愿意用你自己写的API。由于表达力(较差)的原因,强类型语言在应用TDD时可能会比动态语言碰到更多麻烦。实验驱动开发将“定义API”这个步骤向前期推动一步,提前到了写测试代码之前。REPL帮助开发者确保其设计的API在类型系统里能表达得出来。

Scala是一种语法非常灵活的强类型语言,因此有时候需要用点手段欺骗类型系统才能达成你真正想要的API设计。因为很多开发者缺乏强类型理论基础,所以经常需要更多的实验。实验驱动设计(Experiment Driven Design)让你在REPL里结合类型系统进行实验,以便为你的API提炼出最有效的类型定义。实验驱动设计主要用在给代码里添加大特性或领域对象的时候,不适合在添加新方法或者修bug时使用。

实验驱动设计在你定义领域特定语言时(DSL)也能帮上大忙。领域特定语言是用于特定领域的伪编程语言,这种语言专门用来解决手头的某个领域,比如说,从数据库里查询数据。DSL可以是内部的,在很多Scala库里都能看到的;也可以是外部的,比如SQL。在Scala社区,库开发者圈子里非常流行为自己的库创建一种DSL。比如Scala的actors库定义了一种线程安全的发送和接收消息的DSL。

用Scala定义DSL的挑战之一在于有效地利用类型系统。设计良好的类型安全的DSL不仅应该富有表达力、易读,而且应该能在编译期而不是运行期捕捉到很多编程错误。同时静态类型信息也可以极大地提高性能。REPL不仅能用来实验怎样表达一个特定领域,而且能帮助你确定你得表达式是否能编译。进行Scala开发时,有些人采用下面这种创造性的流程。

在REPL里实验API设计。

把能工作的API拷贝到项目文件。

为API写单元测试。

修改代码直到测试通过。

有效地使用实验驱动开发能够极大地提高你的API的质量。也会帮你在推进过程中更适应Scala的语法。不过这种做法有个大问题,就是并非所有能用Scala表达的API都能在REPL里表达。这是因为REPL是积极(eagerly)解析输入,即时解释执行的。

2.1.2 绕过积极(eaglerly)解析

Scala REPL尝试尽可能快地解析输入。这个特点加上其他一些限制,意味着有些东西很难甚至是无法在REPL里表达的。其中一个难以表达的重要的功能是伴生对象和伴生类。

伴生对象和伴生类是一组用完全一样的名字定义的对象和类。用文件编译的方式很容易实现,就像这样简单的声明对象和类:

这些语句在REPL里也能执行,但是它们不会像真的伴生类那样起作用。为证明这一点,我们来做一些只有伴生对象能做,普通对象做不了的事:访问类的私有变量。

为了解决这个问题,我们需要把这些对象嵌入解释器里某个能访问到的其他作用域里。我们现在来把它们放入某个作用域里,以便能同时解释/编译类和伴生对象。

我们在这创建了一个holder对象。这给了我们一个可访问的作用域,也把REPL的编译推迟到holder对象关闭的时候。这样我们就可以在REPL里测试/定义伴生对象了。

即使绕过了积极解析,也还有一些语言特性无法在REPL里重现。大多数这种问题都跟包、包对象、包可见性约束等问题有关。尤其是你无法像在源代码文件里一样有效地在REPL里创建包和包对象。这也意味着其他跟包有关的语言特性,特别是使用private关键字实现的可见性限制也无法在REPL里表达。包通常用来为你的代码设定命名空间,以便与你可能使用的其他类库分开。通常情况下你不需要在REPL里用到它,但是可能有些时候你需要把玩一些Scala的高级特性,比如包对象和隐式解析(implicit resolution),这时你可能会想做点实验驱动开发。但是这种场景下,你无法在REPL里去表达。

请不要绝望。如我之前说过的,大部分构建工具可以让你启动一个针对你当前工程的Scala REPL。作为最后的手段,你可以在Scala文件里把玩那些高级概念,重编译然后重启REPL会话。

另外还有个工具叫做JRebel,它可以动态地在运行中的JVM里重载类文件。JRebel团队非常慷慨地为Scala中的使用提供了免费许可。利用这工具结合某种形式的持续编译—大部分Scala构建工具都提供的这一特性—你可以在修改工程文件后立刻在REPL会话里得到修改后的行为。对于maven-scala-plugin。Simple Build Tool提供了CC任务来做持续编译。不管用哪种构建工具都必须和JRebel类加载器集成以便实现动态类重载。这个技巧有点过于细节,而且可能会变,所以如果需要帮助请参考你用的构建工具的文档或者JRebel网站。

在尝试创建大而复杂的系统前,你可以先利用REPL来实验Scala代码,获得一些真实的感觉。软件开发中,在开发一个新特性前,对当前系统得到一个稍微深入一些的理解(而不只是草草看过)往往是很重要的。Scala REPL可以让你投入最少的时间达成对系统的理解,还可以提高你的开发技巧。本书全文穿插着很多REPL的例子,因为它是教学Scala的最好工具。我经常完全通过REPL运行示例,而不是采用Java开发时的标准做法,先写main方法或者单元测试。

REPL也是开始学习面向表达式编程的极佳方法。

8、在eclipse 中运行scala程序 报错如下:

错误信息说的非常清楚啊,你main函数的声明不对,应该是
public static def main(String[] args):Unit

9、java或者scala写socket客户端发送头消息和消息体到服务端并接收返回信息,这个头消息怎么写

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client {
public static final String IP_ADDR = "localhost";//服务器地址
public static final int PORT = 12345;//服务器端口号

public static void main(String[] args) {
System.out.println("客户端启动...");
System.out.println("当接收到服务器端字符为 \"OK\" 的时候, 客户端将终止\n");
while (true) {
Socket socket = null;
try {
//创建一个流套接字并将其连接到指定主机上的指定端口号
socket = new Socket(IP_ADDR, PORT);

//读取服务器端数据
DataInputStream input = new DataInputStream(socket.getInputStream());
//向服务器端发送数据
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
System.out.print("请输入: \t");
String str = new BufferedReader(new InputStreamReader(System.in)).readLine();
out.writeUTF(str);

String ret = input.readUTF();
System.out.println("服务器端返回过来的是: " + ret);
// 如接收到 "OK" 则断开连接
if ("OK".equals(ret)) {
System.out.println("客户端将关闭连接");
Thread.sleep(500);
break;
}

out.close();
input.close();
} catch (Exception e) {
System.out.println("客户端异常:" + e.getMessage());
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
socket = null;
System.out.println("客户端 finally 异常:" + e.getMessage());
}
}
}
}
}
}

10、scala 适合做 服务器api么

Scala相对于Java的优势是巨大的。熟悉Scala之后再看Java代码,有种读汇编的感觉…… 如果仅仅是写Spark应用,内并非一定要容学Scala,可以直接用Spark的Java API或Python API。但因为语言上的差异,用Java开发Spark应用要罗嗦许多。

与scala游戏服务器相关的知识