{"id":8664,"date":"2019-11-22T01:25:46","date_gmt":"2019-11-22T01:25:46","guid":{"rendered":"http:\/\/zairyo.susi.oita-u.ac.jp\/wordpress\/?p=8664"},"modified":"2019-11-22T02:52:39","modified_gmt":"2019-11-22T02:52:39","slug":"%ef%bc%88%e4%bd%9c%e6%a5%ad%e3%83%a1%e3%83%a2%ef%bc%89node-js%e3%81%ab%e9%96%a2%e3%81%97%e3%81%a620191122","status":"publish","type":"post","link":"http:\/\/zairyo.susi.oita-u.ac.jp\/wordpress\/?p=8664","title":{"rendered":"\uff08\u4f5c\u696d\u30e1\u30e2\uff09node.js\u306b\u95a2\u3057\u306620191122"},"content":{"rendered":"<p>\u4e0b\u8a18\u306e\u30b5\u30a4\u30c8\u3092\u53c2\u8003\u306b\u3057\u3066\uff0c<\/p>\n<ul>\n<li><a href=\"https:\/\/www.atmarkit.co.jp\/ait\/articles\/1603\/14\/news015.html\">\u3044\u307e\u3055\u3089\u805e\u3051\u306a\u3044WebSocket\u3068Socket.IO\u306e\u57fa\u790e\u77e5\u8b58\uff06\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/a><\/li>\n<li><a href=\"https:\/\/qiita.com\/riku-shiru\/items\/ffba3448f3aff152b6c1\">Node.js + Express + Socket.io\u3067\u7c21\u6613\u30c1\u30e3\u30c3\u30c8\u3092\u4f5c\u3063\u3066\u307f\u308b<\/a><\/li>\n<li><a href=\"https:\/\/so-zou.jp\/web-app\/tech\/programming\/javascript\/grammar\/object\/date.htm#no11\">Date\u30aa\u30d6\u30b8\u30a7\u30af\u30c8<\/a><\/li>\n<\/ul>\n<p>\n\u30d5\u30a1\u30a4\u30eb\u3092\u30b5\u30fc\u30d0\u30fc\u306b\u9001\u308b\u30b3\u30fc\u30c9\u3092\u66f8\u3044\u3066\u307f\u305f\u3002\u9001\u3063\u305f\u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30ea\u30f3\u30af\u304c\u8868\u793a\u3055\u308c\u308b\u3002\u307e\u3060\u6d88\u3057\u3066\u3044\u306a\u3044\u4f59\u5206\u306a\u30b3\u30fc\u30c9\u304c\u6b8b\u3063\u3066\u3044\u308b\u3002express \u306e\u30d5\u30a9\u30eb\u30c0\u30fc\u516c\u958b\u306e\u6a5f\u80fd\u3082\u4f7f\u7528\u3059\u308b\u3002<\/p>\n<p>\u30b5\u30fc\u30d0\u30fc\u5074\u306e\u30b3\u30fc\u30c9\uff1aapp.js <\/p>\n<pre><code style=\"color:midnightblue; font-size:12px;white-space:pre-wrap\">\/\/ S01. \u5fc5\u8981\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u8aad\u307f\u8fbc\u3080\r\n\r\nvar express = require('express');\r\nvar app = express();\r\n\r\n\r\nvar http = require('http').Server(app);\r\n\r\nvar io = require('socket.io')(http);\r\n\r\nvar fs = require('fs');\r\n\r\n\/\/ S02. HTTP\u30b5\u30fc\u30d0\u3092\u751f\u6210\u3059\u308b\r\n\/*\r\nvar server = http.createServer(function(req, res) {\r\n    res.writeHead(200, {'Content-Type' : 'text\/html'});\r\n    res.end(fs.readFileSync(__dirname + '\/index.html', 'utf-8'));\r\n}).listen(3000);  \/\/ \u30dd\u30fc\u30c8\u7af6\u5408\u306e\u5834\u5408\u306f\u5024\u3092\u5909\u66f4\r\n*\/\r\n\r\n\/\/static \u30df\u30c9\u30eb\u30a6\u30a8\u30a2\u8a2d\u5b9a\u3092\u8ffd\u52a0\r\napp.use(express.static('public'));\r\n\/\/\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u8a2d\u5b9a\r\napp.get('\/', function (req, res) {\r\n  res.send('Hello World');\r\n});\r\n\r\n\/\/app.listen(3000);\r\n\r\n\r\nhttp.listen(3000, function () {console.log('Server running at http:\/\/localhost:3000\/');});\r\n\r\n\r\n\/\/ S03. HTTP\u30b5\u30fc\u30d0\u306b\u30bd\u30b1\u30c3\u30c8\u3092\u3072\u3082\u4ed8\u3051\u308b\uff08WebSocket\u6709\u52b9\u5316\uff09\r\n\r\n\/\/var io = socketio.listen(server);\r\n\r\n\/\/ S04. connection\u30a4\u30d9\u30f3\u30c8\u30fb\u30c7\u30fc\u30bf\u3092\u53d7\u4fe1\u3059\u308b\r\nio.on('connection', function(socket) {\r\n    var name;\r\n    \/\/ S05. client_to_server\u30a4\u30d9\u30f3\u30c8\u30fb\u30c7\u30fc\u30bf\u3092\u53d7\u4fe1\u3059\u308b\r\n    socket.on('client_to_server', function(data) {\r\n        \/\/ S06. server_to_client\u30a4\u30d9\u30f3\u30c8\u30fb\u30c7\u30fc\u30bf\u3092\u9001\u4fe1\u3059\u308b\r\n       \/\/ io.emit('server_to_client', {value : data.value});\r\n\r\n\tvar moto = data.value;\r\n\r\n\tvar tmp = moto.replace(\/^data:\\w+\\\/\\w+;base64,\/, '');\r\n\r\n\tvar tmpBinary = new Buffer.from(tmp, 'base64');\r\n\r\n\tvar fileExtension = moto.toString().slice(moto.indexOf('\/') + 1, moto.indexOf(';'));\r\n\r\n\tvar tmpDate = new Date();\r\n\r\n\tvar unixTime = Math.round(tmpDate.getTime() \/ 1000);\r\n\r\n\tvar tmpFileName = unixTime + '.' + fileExtension;\r\n\r\n\tfs.writeFile('public\/work\/' + tmpFileName, tmpBinary,function (err) {\r\n\r\n\t\tio.emit('server_to_client', {value : tmpFileName});\r\n\t});\r\n\r\n    });\r\n    \/\/ S07. client_to_server_broadcast\u30a4\u30d9\u30f3\u30c8\u30fb\u30c7\u30fc\u30bf\u3092\u53d7\u4fe1\u3057\u3001\u9001\u4fe1\u5143\u4ee5\u5916\u306b\u9001\u4fe1\u3059\u308b\r\n    socket.on('client_to_server_broadcast', function(data) {\r\n        socket.broadcast.emit('server_to_client', {value : data.value});\r\n    });\r\n    \/\/ S08. client_to_server_personal\u30a4\u30d9\u30f3\u30c8\u30fb\u30c7\u30fc\u30bf\u3092\u53d7\u4fe1\u3057\u3001\u9001\u4fe1\u5143\u306e\u307f\u306b\u9001\u4fe1\u3059\u308b\r\n    socket.on('client_to_server_personal', function(data) {\r\n        var id = socket.id;\r\n        name = data.value;\r\n        var personalMessage = \"\u3042\u306a\u305f\u306f\u3001\" + name + \"\u3055\u3093\u3068\u3057\u3066\u5165\u5ba4\u3057\u307e\u3057\u305f\u3002\"\r\n        \/\/io.to(id).emit('server_to_client', {value : personalMessage});\r\n    });\r\n    \/\/ S09. disconnect\u30a4\u30d9\u30f3\u30c8\u3092\u53d7\u4fe1\u3057\u3001\u9000\u51fa\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1\u3059\u308b\r\n    socket.on('disconnect', function() {\r\n        if (name == 'undefined') {\r\n            console.log(\"\u672a\u5165\u5ba4\u306e\u307e\u307e\u3001\u3069\u3053\u304b\u3078\u53bb\u3063\u3066\u3044\u304d\u307e\u3057\u305f\u3002\");\r\n        } else {\r\n            var endMessage = name + \"\u3055\u3093\u304c\u9000\u51fa\u3057\u307e\u3057\u305f\u3002\"\r\n            io.emit('server_to_client', {value : endMessage});\r\n        }\r\n    });\r\n});\r\n<\/pre>\n<p>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u5074\u306e\u30b3\u30fc\u30c9\uff1aindex.html<\/p>\n<pre><code style=\"color:midnightblue; font-size:12px;white-space:pre-wrap\">&lt;!DOCTYPE html&gt;\r\n    &lt;html lang=&quot;ja&quot;&gt;\r\n    &lt;head&gt;\r\n      &lt;meta charset=&quot;utf-8&quot;&gt;\r\n      &lt;title&gt;websocket-chat&lt;\/title&gt;\r\n      &lt;link rel=&quot;stylesheet&quot;\r\n    href=&quot;https:\/\/maxcdn.bootstrapcdn.com\/bootstrap\/3.3.5\/css\/bootstrap.min.css&quot;&gt;\r\n      &lt;script src=&quot;https:\/\/ajax.googleapis.com\/ajax\/libs\/jquery\/1.11.3\/jquery.min.js&quot;&gt;&lt;\/script&gt;\r\n      &lt;script type=&quot;text\/javascript&quot; src=&quot;\/socket.io\/socket.io.js&quot;&gt;&lt;\/script&gt;\r\n    &lt;\/head&gt;\r\n    &lt;body&gt;\r\n      &lt;div class=&quot;container&quot;&gt;\r\n        &lt;h1&gt;WebSocket&lt;\/h1&gt;\r\n\r\n\t\t&lt;form id=&quot;my_form&quot;&gt;\r\n           \t\t&lt;input id=&quot;ifName&quot; name=&quot;ifName&quot; type=&quot;file&quot; &gt;&lt;br&gt;\r\n\t\t&lt;\/form&gt;\r\n\r\n          &lt;div id=&quot;chatLogs&quot;&gt;&lt;\/div&gt;\r\n      &lt;\/div&gt;\r\n        \r\n        &lt;script type=&quot;text\/javascript&quot;&gt;\r\n            var socket = io.connect();\r\n        \r\n            socket.on(&quot;server_to_client&quot;, function(data){appendMsg(data.value)});\r\n        \r\n            function appendMsg(text) {\r\n                $(&quot;#chatLogs&quot;).append(&quot;&lt;div&gt;&lt;a href='work\/&quot; + text + &quot;'&gt;&quot; + text + &quot;&lt;\/a&gt;&lt;\/div&gt;&quot;);\r\n            }\r\n        \r\n            $(&quot;form&quot;).submit(function(e){\r\n                var message = $(&quot;#msgForm&quot;).val();\r\n                $(&quot;#msgForm&quot;).val('');\r\n                socket.emit(&quot;client_to_server&quot;, {value : message});\r\n                e.preventDefault();\r\n            });\r\n        &lt;\/script&gt; \r\n\r\n &lt;script type=&quot;text\/javascript&quot;&gt;\r\n$(function() {\r\n\t$('#ifName').change(function() {\r\n\r\n\t\tvar base64txt = this.files[0];\r\n\r\n\t\tvar reader = new FileReader();\r\n\r\n\r\n\t\treader.onloadend = function(){\r\n\r\n\t\t\tvar src = reader.result;\r\n                     \r\n\t\t\tsocket.emit(&quot;client_to_server&quot;, {value : src});\r\n\t\t}\t\t\r\n               \r\n             reader.readAsDataURL(base64txt);\r\n          })\r\n})\r\n\r\n&lt;\/script&gt; \r\n\r\n    &lt;\/body&gt;\r\n    &lt;\/html&gt;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u4e0b\u8a18\u306e\u30b5\u30a4\u30c8\u3092\u53c2\u8003\u306b\u3057\u3066\uff0c \u3044\u307e\u3055\u3089\u805e\u3051\u306a\u3044WebSocket\u3068Socket.I &#8230; <a class=\"more-link\" href=\"http:\/\/zairyo.susi.oita-u.ac.jp\/wordpress\/?p=8664\">Read More &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-8664","post","type-post","status-publish","format-standard","hentry","category-column"],"_links":{"self":[{"href":"http:\/\/zairyo.susi.oita-u.ac.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/8664","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/zairyo.susi.oita-u.ac.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/zairyo.susi.oita-u.ac.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/zairyo.susi.oita-u.ac.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/zairyo.susi.oita-u.ac.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8664"}],"version-history":[{"count":16,"href":"http:\/\/zairyo.susi.oita-u.ac.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/8664\/revisions"}],"predecessor-version":[{"id":8680,"href":"http:\/\/zairyo.susi.oita-u.ac.jp\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/8664\/revisions\/8680"}],"wp:attachment":[{"href":"http:\/\/zairyo.susi.oita-u.ac.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8664"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/zairyo.susi.oita-u.ac.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8664"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/zairyo.susi.oita-u.ac.jp\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8664"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}