如何使用nodejs搭建服务器五子棋游戏服务器

在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
标签:至少1个,最多5个
nodejs服务器那么火,作为一个前端,不动手试试就对不起自己,以下是本人的一些个人经验,仅供参考
1.首先你要有一台服务器:
系统:Linux (本人选用的是centos6,其它机器不成功不要怪我)
配置需求:至少是256M内存,(前辈们的血泪经验)
其它:随意
2.操作流程:
1,安装vncviewer远程可视化桌面(或者跳过这步,用FileZilla传文件什么的)
2,安装nodejs环境
3,安装mongodb3.2
4,安装git(可以不安装)
3.安装vncviewer桌面:
本地的直接下载客户端,支持所有电脑系统和手机端
使用putty链接远程服务器,然后执行以下安装脚本,
服务端一键安装脚本如下(看得懂的可以另行修改):
[VNC安装教程][1] /a/6125
如果安装断开没关系,重新输入脚本,会继续安装,
安装成功后会提示输入两次密码,**记住这里的密码**
4.安装nodejs环境:
第1步 – 添加Node.js的Yum库
yum install -y gcc-c++ make
curl -sL /setup_6.x | sudo -E bash -
第2步 – 安装Node.js和NPM
yum install nodejs
第3步 – 检查Node.js和NPM版本
5.安装mongodb数据库
注意:这里需要一些Linux和VIM命令操作,不懂的可以谷歌Linux vim
*在终端执行*
vi /etc/yum.repos.d/mongodb-org-3.2.repo 命令(创建或打开该文件)
*在mongodb-org-3.2.repo中输入*
[mongodb-org-3.2] name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.2/x86_64/
gpgcheck=0
*用yum安装mongodb(如果没有写repo文件则不能用yum安装)*
sudo yum install -y mongodb-org
*启动mongodb服务*
sudo service mongod start
yum -y install zlib-devel curl-devel openssl-devel perl cpio expat-devel gettext-devel openssl zlib autoconf tk perl-ExtUtils-MakeMaker
获取最新版 Git 源码包
从 /git/git/releases 下载最新版的 zip 包或者 tar.gz 并解压:
以 tar.gz 格式为例(在网页的 tar.gz 上右键复制下载链接即可):
wget /git/git/archive/v2.4.0.tar.gz
tar zxvf v2.4.0.tar.gz
会得到一个 git-2.4.0 的目录(版本号与下载的一致),然后进入这个目录:
cd git-2.4.0 编译安装
./configure
make install
以上4步请一步步来,以免出现错误不好找原因。
然后修改 /etc/ld.so.conf 文件,在最后加入一行:
/usr/local/lib
保存并关闭。
这就安装好了,看看版本:
git --version
git version 2.4.0
如果安装后报以下错误:
bash: /usr/bin/git: 没有那个文件或目录
那么请编辑 /etc/profile 在最后加入一行:
export PATH=$PATH:/usr/local/bin
然后重新开窗口就好了,或者执行命令 source /etc/profile 后就好了。
7.搭建博客:
到了这一步接下来就容易多了,用git把项目clone下来,然后直接启动就好了
我使用的博客是nodejs实战上面的例子,经过别人修改后再修改的版本,地址如下:
/OoSpace/xblog
启动命令 node start
建议安装守护进程 supervisor模块,和nginx,使用pm2等
settings.js设置帐号密码
启动mongodb: mongod --dbpath
dbPath\dbname
supervisor start
demo已删除
以上,本文在前辈们的基础上整理汇总,在此一并感谢,手残党请勿尝试模仿
0 收藏&&|&&1
你可能感兴趣的文章
168 收藏,15.2k
3 收藏,596
1 收藏,215
分享到微博?
我要该,理由是:node.js适合游戏后台开发吗?
投稿:junjie
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了node.js适合游戏后台开发吗?node.js是不是能代替C++开发游戏后台呢?看完本文我想你会有一定的了解了,需要的朋友可以参考下
网站服务器和游戏服务器是怎么样联系到一起的?
1. 游戏分很多种,咱们先来看看MMORPG。
再怎么简单的RPG服务器都免不了处理多人交互的情形,上百人在同一个场景里面,每个客户端都需要收到其他所有人的操作信息。
其次,用户的操作是非常频繁的,一般的服务器倾向于持有长连接。而且这些链接的是频繁交互的,没有明显的持久的分区策略,所以限制了服务器的横向扩展,同一个场景往往只能放在一个物理机上面运行。
再次,端游通常是不敢把逻辑运算放客户端的,用户分分钟给你破解掉,改改金币,刷两件装备再常见不过了。所以这一台地图服务器得验证地图内所有玩家的操作,并计算怪物AI、掉率等一系列业务逻辑。
我们可以看到,传统游戏服务器与网页服务器具有明显的区别,具有长连接、多广播、有复杂的业务逻辑、分区策略受限等独特的业务需求。
2. 咱们在来看看并发带给游戏服务器的好处是什么。
并发实际上是一种程序逻辑流程,他是不需要多核物理支持的。大致意思就是让多个独立的逻辑流看上去像是在同时跑一样。操作系统级别的并发就是多进程多线程模型。让OS处理时钟中断,i\o阻塞等等问题。
对于 服务器 而言,如果任务大部分的时间耗在i\o上,有了并发机制可以避免整个地图服务被i\o访问阻塞。一个任务阻塞的时候,把空余计算资源分配到其他任务上去。在这种情况下,并发是有益于服务器运行效率还有响应时间的。
对于程序员而言,独立的逻辑流意味着可以在一个可靠、简单、松耦合的上下文环境里面,完成自己的任务。
因为让OS处理程序逻辑切换得反复陷入内核,有的人觉得这样太慢,做了一些处于user space的线程,进程内自己控制多个逻辑流。因为语言描述能力的限制,在C/C++上面写还有用这种东西都太麻烦。于是产生了erlang, go, lua里面的coroutine语法糖。
node.js本质上也是自己控制多个逻辑流,但是这个逻辑流是根据i\o状态还有优先级分发的。在实际的实现中,它尽量采用非阻塞异步i\o,单个任务调用i\o的时候,我就停掉它,等i\o完成的信号发上来了,我再重启它。
注意这一点,每次我会运行一个任务,直到它完成或者是发生i\o调用都不会主动切换至其他的程序流。那么如果这一个任务里面涉及过于大量的计算,那么整个地图进程都会被block在这里。
而正因为node.js是异步的,所以需要不断的写回调监听i\o完成的信号。单个任务的逻辑流会多次的被打断。当任务变得相当复杂的时候,即有所谓的callbak hell,会带给调试开发非常大的麻烦。
3. 因为上面的原因,所以我不建议在非原型的MMORPG服务器开发中使用node.js。
4.最近兴起的手游服务器倒是挺适合node.js,因为手游这玩意局限于网络问题,服务器只能做关键数据验证,也没办法处理特别多人交互的情形。服务器端已经简化得跟网页服务器没啥区别了,业务逻辑也简单,处理处理数据,然后持久化就成。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具利用node.js搭建简单web服务器的方法教程
作者:xishiyi7
字体:[ ] 类型:转载 时间:
本文主题是使用node来搭建最简单的web服务器,其后可以自己根据需要深入了解,目前在开发过程中可以用来模拟与服务器进行简单的交互,比如返回的资源控制等。需要的朋友可以参考学习,下面来一起看看吧。
使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块、文件系统、url解析模块、路径解析模块、以及301重定向问题,下面我们就简单讲一下如何来搭建一个简单的Web服务器。
早先不使用web服务器的情况下想要在浏览器端访问本地资源,可以利用firefox浏览器,其可以自己启动一个小型web服务器。
为了让刚接触node的人也能大体看懂,本文的代码我将尽量简化。
首先,需要安装,这个可以去官网下载,目前我本地安装的v0.12版本。
安装完成后可以通过命令行测试安装是否成功,输入:node -v,应该会显示当前安装node版本号。
本文中用到的模块,都是nodejs核心模块,不需要从外部下载,如果有需要,可以使用以下命令安装:npm install xxx。
下一步,新建js文件,可以命名为server.js,代码如下:
var http = require('http');
var url = require('url');
var path = require('path');
var fs = require('fs');
var dir, arg = process.argv[2] || ''; // 命令行第三个参数,用来接收目录,可为空,相对当前server.js文件的目录名称
// 比如使用命令 node server debug,意思就是debug文件夹与server.js文件同级
// 且你想以debug文件夹启动web服务
http.createServer(function (req, res) {
var pathname = __dirname + url.parse(req.url).
dir = dir ? dir : // 记住dir(目录)
pathname = dir ? pathname.replace(dir, dir + arg + '/') : // 替换文件静态路径
if (path.extname(pathname) == "") {
pathname += "/";
if (pathname.charAt(pathname.length - 1) == "/") {
pathname += "index.html"; // 入口文件,此处默认index.html
fs.exists(pathname, function (exists) {
if (exists) {
switch (path.extname(pathname)) {
case ".html":
res.writeHead(200, {"Content-Type": "text/html"});
case ".js":
res.writeHead(200, {"Content-Type": "text/javascript"});
case ".css":
res.writeHead(200, {"Content-Type": "text/css"});
case ".gif":
res.writeHead(200, {"Content-Type": "image/gif"});
case ".jpg":
res.writeHead(200, {"Content-Type": "image/jpeg"});
case ".png":
res.writeHead(200, {"Content-Type": "image/png"});
res.writeHead(200, {"Content-Type": "application/octet-stream"});
// res可以自己添加信息来简单交互 比如可以修改点header信息 或者修改返回的资源数据
fs.readFile(pathname, function (err, data) {
res.end(data);
res.writeHead(404, {"Content-Type": "text/html"});
res.end("&h1&404 Not Found&/h1&");
}).listen(8085, "127.0.0.5"); // 服务器端口
console.log("server running at http://127.0.0.5:8085/");
当node安装完成及上述server.js文件也新建好之后。将其与你要访问的文件夹放在一起,可以放同层或者直接下层。比如,如果你要访问d:\test\debug文件夹。
你可以先将当前文件放入同层或者直接下,然后输入如下命令启动web服务:
先打开`cmd`,进入server文件所在目录,比如是`test`目录;
然后输入:`node server debug`(同层), 或者`node server`(子层),
此时会提示`server running at http://127.0.0.5:8085/`, 表示启动服务成功;
最后打开浏览器,进入:`127.0.0.5:8085`,即可访问此资源。
简单解释下上面的代码。
首先最上面的require表示需要用到那几个模块,先引用一下;
arg表示输入的命令行的第三个参数,上面是做了手动截取;
createServer方法表示创建一个http服务,以函数为参数,本文代码中传入了一个匿名函数;
req,表示http request(请求)对象,其携带着来自客户端此次http请求的相关信息,例如请求method、请求query参数、请求header头信息等;
res,表示http response(返回)对象,用来给客户端返回请求资源用,可以手动添加信息,例如返回的数据、返回的头信息等、返回的code等;
fs,表示文件资源对象,具体可以访问nodejs官网的api;
path,表示资源路径对象,具体可以访问nodejs官网的api。
listen表示创建的服务监听,一旦访问了此端口,将进入此前的匿名函数回调中,将资源返回给客户端。
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。谢谢大家对脚本之家的支持。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具博客访问: 11690
博文数量: 5
博客积分: 0
博客等级: 民兵
技术积分: 50
注册时间:
写点东西,帮忙记点东西。
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: JavaScript
环境:Windows XP
1、从官网下载node.exe执行文件
2、使用文本编辑器编写服务器js脚本;
var PORT = 8888;
var http = require('http');
var url=require('url');
var fs=require('fs');
var mine=require('./mine').types;
var path=require('path');
var Tools=require('./Tools');
//var tools = new Tools();
var server = http.createServer(function (request, response) {
&&&&var pathname = url.parse(request.url).pathname;
&&&&var guessPage = Tools.guessPage(fs, path, path.dirname(process.execPath), pathname);
&&&&var realPath = guessPage.realPath;
&&&&var ext = guessPage.ext;
&&&&fs.exists(realPath, function (exists) {
&&&&&&&&if (!exists) {
&&&&&&&&&&&&response.writeHead(404, {
&&&&&&&&&&&&&&&&'Content-Type': 'text/plain'
&&&&&&&&&&&&});
&&&&&&&&&&&&response.write("This request URL " + realPath + " was not found on this server.");
&&&&&&&&&&&&response.end();
&&&&&&&&} else {
&&&&&&&&&&&&fs.readFile(realPath, "binary", function (err, file) {
&&&&&&&&&&&&&&&&if (err) {
&&&&&&&&&&&&&&&&&&&&response.writeHead(500, {
&&&&&&&&&&&&&&&&&&&&&&&&'Content-Type': 'text/plain'
&&&&&&&&&&&&&&&&&&&&});
&&&&&&&&&&&&&&&&&&&&response.end(err);
&&&&&&&&&&&&&&&&} else {
&&&&&&&&&&&&&&&&&&&&var contentType = mine[ext] || "text/plain";
&&&&&&&&&&&&&&&&&&&&console.log("contentType: " + contentType);
&&&&&&&&&&&&&&&&&&&&response.writeHead(200, {
&&&&&&&&&&&&&&&&&&&&&&&&'Content-Type': contentType
&&&&&&&&&&&&&&&&&&&&});
&&&&&&&&&&&&&&&&&&&&response.write(file, "binary");
&&&&&&&&&&&&&&&&&&&&response.end();
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&});
server.listen(PORT);
console.log("Server runing at port: " + PORT + ".");
exports.types = {
&&"css": "text/css",
&&"gif": "image/gif",
&&"htm": "text/html",
&&"html": "text/html",
&&"ico": "image/x-icon",
&&"jpeg": "image/jpeg",
&&"jpg": "image/jpeg",
&&"js": "text/javascript",
&&"json": "application/json",
&&"pdf": "application/pdf",
&&"png": "image/png",
&&"svg": "image/svg+xml",
&&"swf": "application/x-shockwave-flash",
&&"tiff": "image/tiff",
&&"txt": "text/plain",
&&"wav": "audio/x-wav",
&&"wma": "audio/x-ms-wma",
&&"wmv": "video/x-ms-wmv",
&&"xml": "text/xml"
// if export Object, use constructor define
//function Tools() {};
// export Object
//module.exports = T
&* 补充请求页面,自动添加index.html/index.htm
//Tools.guessPage
exports.guessPage = function(fs, path, curDir, pathname) {
&&&&console.log("pathname: " + pathname);
&&&&if (!pathname) {
&&&&&&&&pathname = pathname+"/";
&&&&var realPath = path.join(curDir, pathname);
&&&&console.log("realPath: " + realPath);
&&&&var ext = path.extname(realPath);
&&&&console.log("before ext: " + ext);
&&&&if (!ext) {
&&&&&&&&// guess index.html, is not exist, then index.htm.
&&&&&&&&var tmpPath = realPath + "index.htm";
&&&&&&&&console.log("tmpPath: " + tmpPath);
&&&&&&&&// fs.existsSync will be deprecated.
&&&&&&&&// var exists = fs.existsSync(tmpPath);
&&&&&&&&var exists = true;
&&&&&&&&try {
&&&&&&&&&&&&fs.openSync(tmpPath, "r");
&&&&&&&&} catch (e) {
&&&&&&&&&&&&console.log("e: " + e);
&&&&&&&&&&&&exists = false;
&&&&&&&&console.log("exists: " + exists);
&&&&&&&&if (exists) {
&&&&&&&&&&&&ext = "htm";
&&&&&&&&} else {
&&&&&&&&&&&&tmpPath = realPath + "index.html";
&&&&&&&&&&&&ext = "html";
&&&&&&&&realPath = tmpPath;
&&&&} else {
&&&&&&&&ext = ext.slice(1);
&&&&console.log("ext: "+ext);
&&&&var result = new Object();
&&&&result.realPath = realPath;
&&&&result.ext = ext;
&&&&return result;
3、将这些js脚本和node.exe一起拷贝到web应用根目录下,执行dos命令或者直接拖动test.js文件放在node.exe文件上,服务器环境便启动了,支持html/css/js的静态web服务器应用。
4、访问web服务器:http://127.0.0.1:8888,默认会导航到web应用根目录下的index.htm/index.html。
注:本文将服务器js脚本拆分成了3个文件,是为了了解和学习nodejs的模块化编码,实际环境下可以使用一个js文件完成同样的任务。
参考资料:
阅读(7001) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 nodejs搭建http服务器 的文章

 

随机推荐