Mais conteúdo relacionado Semelhante a 自宅で出来る!ゲームサーバの作り方 (20) 自宅で出来る!ゲームサーバの作り方8. 環境
• 仮想マシン:VMware Player 7.1.0
• https://my.vmware.com/jp/web/vmware/
free#desktop_end_user_computing/vmware_player/7_0
• VMware-player-7.1.0-2496824.exe
8
10. 環境
• Eclipse 4.4.2 Pleiades All in One
• http://mergedoc.sourceforge.jp/index.html#/
pleiades_distros4.4.html
• Java版の64bit Full Edition
10
20. サーバ設定
$ コマンド ==> ユーザのアカウントでのコマンド実行
# コマンド ==> rootアカウントでのコマンド実行
■ ネットワークアクセス制限を解除
# iptables -F
# /etc/init.d/iptables save
20
23. MySQLインストール・初期設定
■ yumリポジトリ追加 [1]
# yum install -y https://dev.mysql.com/get/
mysql-community-release-el6-5.noarch.rpm
■ MySQLパッケージインストール
# yum install -y mysql-community-server
■ 文字コード設定
# vi /etc/my.cnf
[mysqld]
character-set-server=utf8 <= 追記
23
26. Redisインストール
■ yumリポジトリ追加 [1]
# yum install -y http://
rpms.famillecollet.com/enterprise/remi-
release-6.rpm
■ Redisパッケージインストール
# yum install -y redis
■ 設定変更(他のPCからのアクセスを許可)
# vi /etc/redis.conf
以下の行を変更
bind 127.0.0.1 => bind 0.0.0.0
26
32. Tomcat設定
■ Tomcat Manager用アクセス設定
# cd /usr/local/tomcat/conf
# vi tomcat-users.xml
以下を下部(</tomcat-users>の上)に追記
<role rolename=“admin-gui”/>
<role rolename=“manager-gui”/>
<role rolename=“manager-script”/>
<user username=“manager” password=“manager”
roles=“admin-gui,manager-gui,manager-script”/>
■ Tomcat起動(仮想マシン再起動のたびに実行)
# /usr/local/tomcat/bin/startup.sh
32
42. Eclipse設定(Tomcat Manager [2])
■ server.xml
<Host appBase=“…> の下に以下を追加
<Context docBase=“${catalina.home}/webapps/
manager” path=“/manager” privileged=“true”/>
■ tomcat-users.xmlに以下を追加
<role rolename=“manager-gui”/>
<user username=“manager” password=“manager”
roles=“manager-gui”/>
■ Tomcatサーバ起動&アクセス確認
サーバタブでサーバを起動し、ブラウザで以下にアクセス
http://localhost:8080/manager
42
54. • [demo1] HTTP GET
• [demo2] HTTP POST
• [demo3] WebSocket
• [demo4] チャットサーバ
• [demo5] MySQL
• [demo6] Redis
54
58. [demo1]
webapp/demo1/servlet.jsp
<%@ page language="java" contentType="text/html; charset=utf8" pageEncoding="utf8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
<title><%= request.getAttribute("title") %></title> ・・・受け渡されたパラメータ
</head>
<body>
<h1>Demo1 Servlet</h1>
<h2><%= request.getAttribute("body") %></h2>
</body>
</html>
58
62. [demo2]
webapp/demo2/login.jsp
<%@ page language="java" contentType="text/html; charset=utf8" pageEncoding="utf8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
<title>Demo2 Servlet</title>
</head>
<body>
<h1>Demo2 Servlet</h1>
<h2><%= request.getAttribute("body") %></h2>
<form method="post" action="<%= request.getContextPath() %>/demo2/servlet">
名前:<input name="name" type="text"/><br/><br/>
<input type="submit" value="OK" />
</form> ・・・フォームを使用して、サーバにデータを送信(POST)
</body>
</html>
62
66. [demo3]
webapp/demo3/ws.jsp
<%@ page language="java" contentType="text/html; charset=utf8" pageEncoding="utf8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
<title>Demo3 WebSocket</title>
<script src="../js/jquery.min.js"></script>
<script type="text/javascript">
var url = 'ws://' + location.host + '<%= request.getContextPath() %>/demo3/ws';
var ws = new WebSocket(url); ・・・WebSocketインスタンス生成
ws.onopen = function() { ・・・コネクション接続完了時のコールバック
ws.send('Hello WebSocket GameServer’); ・・・サーバにメッセージを送信
};
</script>
</head>
<body>
<h1>Demo3 WebSocket</h1>
</body>
</html>
66
70. [demo4]
webapp/demo4/chat.jsp
・・・
ws.onmessage = function(receive) { ・・・サーバからのメッセージ受信時のコールバック
$('#message').html(receive.data + "<br/>" + $(‘#message').html());
・・・messageのタグに文字列を追加
};
ws.onopen = function() {
ws.send('enter,<%= request.getAttribute("name") %>');
};
function send() {
ws.send('talk,' + $(‘#inputText')[0].value); ・・・inputTextの文字列をサーバに送信
}
・・・
<span id="message"></span>
<br/>
<input id="inputText" type="text" placeholder="メッセージ" value=""/>
<input type="button" value="送信" onclick=“send();"/> ・・・ボタン押下でsend()メソッド呼び出し
・・・
70
73. [demo5]
MySQL設定
■ /etc/my.cnf編集
# vi /etc/my.cnf
以下のように、[mysqld]の行の下に文字コードUTF-8設定の記述を追加し、サーバを再起動
[mysqld]
character-set-server=utf8
# /etc/init.d/mysqld restart
■ mavenでmysql-connector-java追加
pom.xmlを編集し、<dependencies>タグの中に以下を追加
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
73
74. [demo5]
MySQL設定
■ データベース、テーブル、ユーザ作成
$ mysql -u root
- データベース作成
mysql> CREATE DATABASE sample_game_server;
mysql> USE sample_game_server;
- テーブル作成
mysql> CREATE TABLE login_log (id INT AUTO_INCREMENT PRIMARY KEY, ¥
name VARCHAR(32) NOT NULL, created_at DATETIME NOT NULL);
mysql> CREATE TABLE chat_log (id INT AUTO_INCREMENT PRIMARY KEY, ¥
name VARCHAR(32) NOT NULL, message VARCHAR(256) NOT NULL, ¥
created_at DATETIME NOT NULL);
- ユーザ作成
mysql> GRANT ALL PRIVILEGES ON sample_game_server.* TO ¥
sampleuser@localhost IDENTIFIED BY 'samplepass';
mysql> GRANT ALL PRIVILEGES ON sample_game_server.* TO ¥
sampleuser@'%' IDENTIFIED BY 'samplepass';
74
75. [demo5]
jp/game/server/demo5/Dao.java
public class Dao {
・・・
public static void addLoginLog(String name) {
try (
Connection conn = DriverManager.getConnection(url, userName,
userPass); ・・・DBへのコネクション接続
PreparedStatement stmt = conn.prepareStatement(INSERT_LOGIN_LOG);
) {
stmt.setString(1, name);
stmt.executeUpdate(); ・・・INSERT文実行
} catch (SQLException e) {
e.printStackTrace();
}
}
・・・
}
75
76. [demo5]
jp/game/server/demo5/GameServerWebSocket.java
・・・
public void onMessage(String message, Session session) throws IOException {
・・・
switch (data[0]) {
case "enter":
name = data[1];
broadcast(name + "が入室しました。", session);
Dao.addLoginLog(name); ・・・ログインログ作成
break;
case "talk":
String chatMessage = data[1];
broadcast(name + ":" + chatMessage, session);
Dao.addChatLog(name, chatMessage); ・・・チャットログ作成
break;
default:
break;
}
}
・・・
76
77. [demo5]
動作確認
■ MySQLにログインし、直接テーブルの中身を確認する
$ mysql -u root
mysql> SELECT * FROM chat_log;
+----+----------+-----------------------------+---------------------+
| id | name | message | created_at |
+----+----------+-----------------------------+---------------------+
・・・
+----+----------+-----------------------------+---------------------+
mysql> SELECT * FROM login_log;
+----+----------+---------------------+
| id | name | created_at |
+----+----------+---------------------+
・・・
+----+----------+---------------------+
77
81. [demo6]
jp/game/server/demo6/JedisManager.java
public class JedisManager {
・・・
private void initialize() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(10);
poolConfig.setMinIdle(5);
poolConfig.setMaxTotal(20);
String host = "localhost";
int port = 6379;
JedisPool pool = new JedisPool(poolConfig, host, port);
・・・Redisへのコネクション接続
}
public void setData(String key, String value) {
・・・Redisにデータを格納
}
public String getData(String key) {
・・・Redisからデータを取得
}
}
81