{"id":305134,"date":"2020-06-10T09:00:37","date_gmt":"2020-06-10T09:00:37","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=305134"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=305134","title":{"rendered":"Kurento JSON RPC \u0447\u0435\u0440\u0435\u0437 WebSocket-JS \u043d\u0430 Spring Boot"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/inobitec\/blog\/505934\/\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/6a\/je\/t_\/6ajet_bvdpxuml-smf7ng6utjos.png\"><\/div>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0435\u0442 Kurento, \u043a\u0430\u043a WebRTC \u043c\u0435\u0434\u0438\u0430-\u0441\u0435\u0440\u0432\u0435\u0440. \u041d\u043e \u0432 \u0438\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 git-\u0445\u0430\u0431\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 JSON-RPC, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0435\u0440\u0435\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0441\u0435\u0441\u0441\u0438\u0438 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 Java. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 Spring Boot \u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430 JavaScript.<br \/>  <a name=\"habracut\"><\/a><\/p>\n<h3>\u041a\u043e\u043c\u0443 \u044d\u0442\u043e \u043d\u0430\u0434\u043e \u0438\u043b\u0438 \u043a\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u0435\u0448\u0430\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Kurento JSON RPC?<\/h3>\n<p>  \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u0442\u0435\u043a \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0439 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043d\u0430 \u0431\u0430\u0437\u0435 WebRTC. \u041a\u043e\u0433\u0434\u0430 \u0438\u0434\u0435\u0442 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0441\u044f \u0441 \u043c\u0435\u0434\u0438\u0430-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u044d\u0442\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u201c\u043d\u0430 \u043b\u0435\u0442\u0443\u201d. \u0422\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d WebRTC. <\/p>\n<p>  \u041d\u043e \u0432\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u0445, \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043a\u043e\u043c\u043d\u0430\u0442\u0430\u0445 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0439 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u0434\u0442\u0438 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u043a\u0430\u043d\u0430\u043b\u0443 (\u043d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e \u201c\u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439\u201d). \u0418 \u0441\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435 \u2014 \u0432 \u0434\u0432\u0443\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u043c \u0440\u0435\u0436\u0438\u043c\u0435. \u041c\u0435\u0442\u043e\u0434 \u0437\u0430\u043f\u0440\u043e\u0441\/\u043e\u0442\u0432\u0435\u0442 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u0442.\u043a. \u043d\u0430\u0434\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u0432 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u0445. \u0422.\u0435. \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u0436\u0435 \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0442\u043e\u0442 \u043d\u0435 \u043f\u0440\u043e\u0441\u0438\u0442.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043a\u0430\u043d\u0430\u043b\u044b \u0441\u0432\u044f\u0437\u0438 \u0438\u0434\u0443\u0442 \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u043c \u0438 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u043c\u0438, \u0442\u043e \u043f\u0435\u0440\u0435\u0431\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u0440\u0443\u0433\u0438\u0445. \u041e \u0441\u0432\u043e\u0438\u0445 \u043a\u0430\u043d\u0430\u043b\u0430\u0445 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u0445 \u043c\u0435\u0434\u0438\u0430-\u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0437\u0430\u0431\u043e\u0442\u044f\u0442\u0441\u044f \u0441\u0430\u043c\u0438, \u0430 \u0432\u043e\u0442 \u201c\u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0439\u201d \u043a\u0430\u043d\u0430\u043b \u043f\u043e\u0434 \u043d\u0430\u0448\u0435\u0439 \u043e\u043f\u0435\u043a\u043e\u0439. <\/p>\n<p>  \u0421\u0430\u043c\u044b\u0439 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u044d\u0442\u043e WebSocket (sockJS). \u0414\u0432\u0443\u0445\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u044f\u044f \u0441\u0432\u044f\u0437\u044c \u043f\u043e\u0432\u0435\u0440\u0445 HTTPS. \u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0442\u0435\u0440\u0435 \u0441\u0432\u044f\u0437\u0438. \u042d\u0442\u0438\u043c \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 kurento-jsonrpc.<\/p>\n<p>  \u0413\u043b\u0430\u0432\u043d\u044b\u043c\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u0442 kurento \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430\/\u043a\u043b\u0438\u0435\u043d\u0442\u0430 (\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f Spring Boot) \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c JSON-RPC. <\/p>\n<p>  \u0421\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u043e\u0439. \u0412\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0437\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u043c \u201cid\u201d \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443, \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u043e\u043c \u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0431\u0435\u0440\u0435\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435, \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 sessionID, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043e\u0440\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0418 \u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c. \u041d\u0430\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u201c\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435\u201d \u0434\u0430\u043d\u043d\u044b\u0435: \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u041d\u0443 \u0438 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0436\u0438\u0437\u043d\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f: ping-pong, session timeout, request timeout. <\/p>\n<h3>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f<\/h3>\n<p>  Java \u0432\u0435\u0440\u0441\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0443\u0442: <br \/>  <a href=\"https:\/\/github.com\/Kurento\/kurento-java\/tree\/master\/kurento-jsonrpc\">https:\/\/github.com\/Kurento\/kurento-java\/tree\/master\/kurento-jsonrpc<\/a><br \/>  \u0412 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 kurento \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 C++ \u0438 Node-JS. <br \/>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0440\u0435\u0437 <b>Maven<\/b>, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0443\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438.<\/p>\n<p>  \u0418\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u201chello world\u201d \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445: <br \/>  <a href=\"https:\/\/github.com\/Kurento\/doc-kurento-jsonrpc\">https:\/\/github.com\/Kurento\/doc-kurento-jsonrpc<\/a><\/p>\n<h3>\u0421\u0435\u0440\u0432\u0435\u0440<\/h3>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 JSON-RPC \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 WebSocket \u043d\u0430 Spring Boot. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0430 <a href=\"https:\/\/start.spring.io\/\">https:\/\/start.spring.io\/<\/a> \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0442\u0443\u0442 \u0436\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0430\u043a\u0435\u0442 \u201cSpring Web\u201d \u2014 \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  <i>\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Spring initializr:<\/i><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/de\/-q\/ws\/de-qwsrhjkivobnr4npdvcvjhu0.png\"><\/p>\n<p>  \u0412 \u0444\u0430\u0439\u043b\u0435 <b>pom.xml<\/b> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443: \u201ckurento-jsonrpc-server\u201d  <\/p>\n<pre><code class=\"xml\">&lt;!-- https:\/\/mvnrepository.com\/artifact\/org.kurento\/kurento-jsonrpc-server --&gt; &lt;dependency&gt;     &lt;groupId&gt;org.kurento&lt;\/groupId&gt;     &lt;artifactId&gt;kurento-jsonrpc-server&lt;\/artifactId&gt;     &lt;version&gt;6.13.1&lt;\/version&gt; &lt;\/dependency&gt; <\/code><\/pre>\n<p>  \u0421\u0440\u0430\u0437\u0443 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c SSL. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u0435\u043d \u0444\u0430\u0439\u043b \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432. <br \/>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 kurento, \u0442\u043e \u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0443 \u043d\u0438\u0445: <a href=\"https:\/\/github.com\/Kurento\/kurento-tutorial-java\/tree\/master\/kurento-one2one-call\/src\/main\/resources\">\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 github<\/a>. \u041e\u043d \u0441\u0430\u043c\u043e\u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u201c\u0434\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f\u201d \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0443. <\/p>\n<p>  \u041f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u043d\u0430\u0434\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430 <b>keystore.jks<\/b> \u0438 <b>application.properties<\/b> \u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0438\u0445 \u0432 \u043f\u0430\u043f\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430: <b>\/src\/main\/resources<\/b>. \u041d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 <b>properties<\/b> \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0440\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0442\u0430\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f: <i>${demo.port}<\/i>). \u0414\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"bash\"># EMBEDDED SERVER CONFIGURATION server.port=8080 server.ssl.key-store=classpath:keystore.jks server.ssl.key-store-password=kurento server.ssl.key-store-type=JKS server.ssl.key-alias=kurento-selfsigned <\/code><\/pre>\n<p>  \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f kurento: <b>\u201clogging.level.org.kurento=DEBUG\u201d<br \/>  \u201clogging.level.org.kurento.jsonrpc.internal.server=TRACE\u201d <\/b><br \/>  \u0412 \u043b\u043e\u0433\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438 \u043e\u0431\u043c\u0435\u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438. Kurento \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043f\u0430\u043c\u0438\u0442 \u0432 \u043b\u043e\u0433\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435.<\/p>\n<h3>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0430\u043c Spring Boot<\/h3>\n<p>  \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e:  <\/p>\n<ol>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e: <b>@ Import(JsonRpcConfiguration.class)<\/b><\/li>\n<li>\u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434: <br \/>  <b>registerJsonRpcHandlers(JsonRpcHandlerRegistry registry)<\/b><\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439:<br \/>   \u2014 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a \u043e\u0442 <b>DefaultJsonRpcHandler <\/b><br \/>   \u2014 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434: <b>handleRequest(Transaction transaction, Request request) <\/b>   <\/li>\n<\/ol>\n<p>  \u042d\u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c. \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439. \u041a\u043e\u0434 \u044f \u00ab\u043f\u0440\u0438\u043f\u0440\u0430\u0432\u0438\u043b\u00bb \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u0438 \u0432\u044b\u0432\u0435\u043b \u0441\u0430\u043c\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 \u043b\u043e\u0433\u0438. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0434\u0432\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<p>  \u041a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 <b>main<\/b> \u043c\u0435\u0442\u043e\u0434 (\u0435\u0441\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0443, \u0442\u043e \u043a\u043b\u0430\u0441\u0441 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <b>KurentoJsonrpcDemoApplication<\/b>):  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 java: KurentoJsonrpcDemoApplication<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">@SpringBootApplication @Import(JsonRpcConfiguration.class) public class KurentoJsonrpcDemoApplication implements JsonRpcConfigurer {      @Override     public void registerJsonRpcHandlers(JsonRpcHandlerRegistry registry) {         registry.addHandler(kurentoJsonrpcDemoHandler(), &quot;\/jsonrpc&quot;);     }      @Bean     public JsonRpcHandler&lt;?&gt; kurentoJsonrpcDemoHandler() {         KurentoJsonrpcDemoHandler handler = new KurentoJsonrpcDemoHandler();          handler                 .withSockJS()               \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SockJS                 .withLabel(&quot;DEMO_LABEL&quot;)    \/\/ \u041c\u0435\u0442\u043a\u0430 \u0441\u043e\u043a\u0435\u0442\u0430. \u0412\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043b\u043e\u0433\u0430\u0445 \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438.                 .withAllowedOrigins(&quot;*&quot;)    \/\/ \u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f                 .withPingWatchdog(true);    \/\/ \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0438\u043d\u0433\u0438 \u0432 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u0445          return handler;     }      @Bean     public ServletServerContainerFactoryBean createWebSocketContainer() {          \/\/ \u0415\u0441\u043b\u0438 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0441\u0435\u0441\u0441\u0438\u0438, \u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f.         final long maxSessionIdleTimeout = 100000;          ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();         container.setMaxSessionIdleTimeout(maxSessionIdleTimeout);         return container;     }      public static void main(String[] args) {         SpringApplication.run(KurentoJsonrpcDemoApplication.class, args);     }  } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412\u0430\u0436\u043d\u043e \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e \u201c@Import(JsonRpcConfiguration.class)\u201d. \u041e\u043d\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043a\u043b\u0430\u0441\u0441 \u201c<b>KurentoJsonrpcDemoHandler<\/b>\u201d \u2014 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439:  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 java: KurentoJsonrpcDemoHandler<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">public class KurentoJsonrpcDemoHandler extends DefaultJsonRpcHandler&lt;JsonObject&gt; { \tprivate static Logger log = LoggerFactory.getLogger(KurentoJsonrpcDemoHandler.class);  \t\/** \t * \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \t *\/ \t@Override \tpublic void handleRequest(Transaction transaction, Request&lt;JsonObject&gt; request) throws Exception {  \t    \/\/ \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0441\u0435\u0441\u0441\u0438\u0438 \t\tSession kurentoSession = transaction.getSession();  \t\tlog.info(&quot;========== REQUEST ==========&quot;); \t\tlog.info(&quot;[SESSION] isNew: {}&quot;, kurentoSession.isNew()); \t\tlog.info(&quot;[SESSION] SessionId: {}&quot;, kurentoSession.getSessionId()); \t\tlog.info(&quot;[SESSION] RegisterInfo: {}&quot;, kurentoSession.getRegisterInfo()); \t\tlog.info(&quot;[SESSION] Attributes: {}&quot;, \tkurentoSession.getAttributes());  \t\t\/\/ \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \t\tlog.info(&quot;[REQUEST] id: {}&quot;, request.getId()); \/\/ id \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \t\tlog.info(&quot;[REQUEST] method: {}&quot;, request.getMethod()); \/\/ \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \t\tlog.info(&quot;[REQUEST] params: {}&quot;, request.getParams()); \/\/ \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b json  \t        \/\/ \u041e\u0442\u0432\u0435\u0442. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \t\ttransaction.sendResponse(request.getParams()); \t}  \t\/** \t * \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \t *\/ \t@Override \tpublic void afterConnectionEstablished(Session session) throws Exception { \t\tlog.info(&quot;========== ESTABLISHED ==========&quot;); \t\tlog.info(&quot;[SESSION] SessionId: {}&quot;, session.getSessionId()); \t\tsession.setReconnectionTimeout(15000); \t}  \t\/** \t * \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u0440\u044b\u0432\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \t * String status - \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \t *\/ \t@Override \tpublic void afterConnectionClosed(Session session, String status) throws Exception { \t\tlog.info(&quot;========== CLOSED ==========&quot;); \t\tlog.info(&quot;[STATUS] {}&quot;, status); \t\tlog.info(&quot;[SESSION] SessionId: {}&quot;, session.getSessionId()); \t}  \t\/** \t * \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0437\u0440\u044b\u0432\u0430 \u0441\u0432\u044f\u0437\u0438 (\u043d\u0435 \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442) \t *\/ \t@Override \tpublic void afterReconnection(Session session) throws Exception { \t\tlog.info(&quot;========== RECONNECTION ==========&quot;); \t\tlog.info(&quot;[SESSION] SessionId: {}&quot;, session.getSessionId()); \t} } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412\u0441\u0451 \u2014 \u0441\u0430\u043c\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0433\u043e\u0442\u043e\u0432. \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c.<\/p>\n<p>  \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u043f\u043e\u0440\u0442\u0435 <b>8080<\/b> \u0438 \u0441 \u0441\u043e\u043a\u0435\u0442\u043e\u043c \u043d\u0430 \u043f\u0443\u0442\u0438 <b>&quot;\/jsonrpc&quot;<\/b>.<br \/>  \u0415\u0441\u043b\u0438 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u043a\u0435\u0442\u0443 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 JSON-RPC, \u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430\u043f\u0438\u0448\u0435\u0442 \u0432 \u043b\u043e\u0433\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0435\u0441\u0441\u0438\u0438 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435, \u0437\u0430\u0442\u0435\u043c \u0432\u0435\u0440\u043d\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0431\u0440\u0430\u0442\u043d\u043e.<\/p>\n<h3>\u0421\u0435\u0440\u0432\u0435\u0440: \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445<\/h3>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u044f \u0443\u043a\u0430\u0437\u0430\u043b \u0432 \u043a\u043e\u0434\u0435. \u0420\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0438\u0445 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u0435\u0435.<br \/>  \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:  <\/p>\n<ol>\n<li><b>withSockJS()<\/b> \u2014 \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SockJS. \u0411\u0435\u0437 \u0432\u044b\u0437\u043e\u0432\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0439 WebSocket. <\/li>\n<li><b>withLabel(\u00abDEMO_LABEL\u00bb)<\/b> \u2014 \u041c\u0435\u0442\u043a\u0430 \u0441\u043e\u043a\u0435\u0442\u0430. \u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430. \u042d\u0442\u0443 \u043c\u0435\u0442\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0442\u0435\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u0432 \u0441\u0430\u043c\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 KurentoJsonrpcDemoHandler: this.getLabel(). \u0423\u0434\u043e\u0431\u043d\u043e, \u0447\u0442\u043e \u043e\u043d\u0430 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043b\u043e\u0433\u0430\u0445.<\/li>\n<li><b>withAllowedOrigins(&quot;*&quot;)<\/b> \u2014 \u043a\u0430\u043a \u0438 \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c WebSocket\u2019\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043e\u0442 \u043a\u0430\u043a\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. <b>\u201c*\u201d<\/b> \u2014 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043b\u044e\u0431\u044b\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435.<\/li>\n<li><b>withPingWatchdog(true)<\/b> \u2014 \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c\/\u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439. \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0438 \u043d\u0435 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u201cping\u201d, \u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u0440\u0430\u0437\u043e\u0440\u0432\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435. \u0412\u0440\u0435\u043c\u044f, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043e\u0440\u0432\u0430\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442 \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u201cping\u201d. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 3, \u0442.\u0435. \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u0432\u0430 \u043f\u0438\u043d\u0433\u0430. \u0415\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0435 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 20 \u0441\u0435\u043a\u0443\u043d\u0434 \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u0440\u0430\u0437\u043e\u0440\u0432\u0435\u0442 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043c\u0438\u043d\u0443\u0442\u0443 (20*3).<\/li>\n<\/ol>\n<p>  \u041f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <b>createWebSocketContainer()<\/b> \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f, \u0442.\u043a. \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u0441\u0435\u0440\u0432\u043b\u0435\u0442\u0430. <br \/>  \u0418\u0437 \u0432\u0430\u0436\u043d\u043e\u0433\u043e \u043f\u043e \u0442\u0435\u043c\u0435:  <\/p>\n<ol>\n<li><b>setMaxSessionIdleTimeout(Long timeoutInMillis)<\/b> \u2014 \u0435\u0441\u043b\u0438 \u0441\u043e\u043a\u0435\u0442 \u043d\u0435 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0442\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0442 \u0447\u0435\u0440\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.<\/li>\n<li><b>setMaxTextMessageBufferSize \u0438 setMaxBinaryMessageBufferSize<\/b> \u2014 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0441\u043e\u043a\u0435\u0442\u0430. \u0414\u043b\u044f \u043d\u0443\u0436\u0434 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e (8 * 1024 \u0431\u0430\u0439\u0442). \u041d\u043e \u0431\u044b\u043b\u0438 \u0441\u043b\u0443\u0447\u0430\u0438, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c: \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0441\u0442\u043e\u044f\u043b\u043e \u0434\u0432\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043a\u0430\u0440\u0442\u044b \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439. \u0412 \u0438\u0442\u043e\u0433\u0435 SDPOffer \u043d\u0435 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b\u0441\u044f \u0432 \u044d\u0442\u043e\u0442 \u0431\u0443\u0444\u0435\u0440.<\/li>\n<\/ol>\n<h3>\u0421\u0435\u0440\u0432\u0435\u0440: \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 \u043c\u0435\u0442\u043e\u0434\u044b<\/h3>\n<p>  \u0421\u0430\u043c\u044b\u0439 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u2014 \u044d\u0442\u043e <b>handleRequest (transaction, request)<\/b>.<\/p>\n<p>  \u041e\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. <br \/>  \u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0430: &quot;<b>terminate<\/b>&quot;, &quot;<b>poll<\/b>\u201d, &quot;<b>execute<\/b>&quot;, &quot;<b>connect<\/b>&quot;, &quot;<b>ping<\/b>&quot;, &quot;<b>closeSession<\/b>&quot;, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u0435, \u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442\u0435 \u044d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c.<\/p>\n<p>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0430\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 JSON \u0441\u0442\u0440\u043e\u043a\u0443 \u0432\u0438\u0434\u0430:<i> {\u00abjsonrpc\u00bb:\u00ab2.0\u00bb,\u00abmethod\u00bb:\u00abping\u00bb,\u00abid\u00bb:1}<\/i>, \u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u0432\u043e\u0441\u043f\u0440\u0438\u043c\u0435\u0442 \u0435\u0451 \u043a\u0430\u043a \u0441\u0432\u043e\u044e \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 handleRequest. \u0422.\u0435. \u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u0442 \u043e \u0442\u0430\u043a\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a.<\/p>\n<p>  \u0414\u0440\u0443\u0433\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u043a\u043e\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435: <a href=\"https:\/\/github.com\/Kurento\/kurento-java\/blob\/27c76f55350dfed71ece5efe5da6b66576614573\/kurento-jsonrpc\/kurento-jsonrpc-client\/src\/main\/java\/org\/kurento\/jsonrpc\/internal\/JsonRpcConstants.java\"><b>org.kurento.jsonrpc.internal.JsonRpcConstants.class<\/b><\/a><\/p>\n<h3>\u041c\u0435\u0442\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438<\/h3>\n<p>  <b>afterConnectionEstablished<\/b> \u2014 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e. \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u0435\u0440\u0432\u044b\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. <b>\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435:<\/b> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u043e\u0441\u044c \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0430 \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u043f\u043e\u0437\u043d\u0430\u043b \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u0441 JSON-RPC \u0442.\u0435. \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<p>  <b>afterConnectionClosed<\/b> \u2014 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u043e. \u041a\u0430\u043a \u0438 \u0441 \u043f\u0435\u0440\u0432\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0438, \u0442.\u0435. \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f.<br \/>  \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0433\u0434\u0430:  <\/p>\n<ul>\n<li>\u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u0438\u0441\u043b\u0430\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u201c<b>closeSession<\/b>\u201d<\/li>\n<li>\u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0435 \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u201c<b>ping<\/b>\u201d \u0434\u043e\u043b\u044c\u0448\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/li>\n<li>\u0438\u0441\u0442\u0435\u043a \u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u0431\u0435\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u043b\u0435\u0442\u0435<\/li>\n<\/ul>\n<p>  <b>afterReconnection<\/b> \u2014 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f. \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u0441\u0447\u0438\u0442\u0430\u043b\u0441\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c, \u043d\u043e, \u0432\u0434\u0440\u0443\u0433 \u043f\u0440\u0438\u0441\u043b\u0430\u043b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435: \u201cconnect\u201d \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u201csessionId\u201d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0441\u0435\u0441\u0441\u0438\u044f\u0445 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0436\u0435.<\/p>\n<p>  <b>handleUncaughtException<\/b> \u0438 <b>handleTransportError<\/b> \u2014 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u0438\u0448\u0443\u0442 \u0432 \u043b\u043e\u0433\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445, \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u044b\u0445 \u043e\u0442\u043a\u0430\u0437\u0430\u043c\u0438 \u043d\u0430 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435. \u041c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0445, \u043d\u043e \u043f\u043e\u043b\u044c\u0437\u044b \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u044f \u043e\u0441\u043e\u0431\u043e\u0439 \u043d\u0435 \u0432\u0438\u0436\u0443.<\/p>\n<h3>\u0421\u0435\u0441\u0441\u0438\u0438 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h3>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043a \u0441\u043e\u043a\u0435\u0442\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f, \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0431 \u044d\u0442\u043e\u043c<b> \u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442<\/b>, \u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0437\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0431\u0435\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f (\u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043c\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438 <b>setMaxSessionIdleTimeout<\/b>) \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0437\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u201c<b>ping<\/b>\u201d \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 json-rpc, \u043e\u043d \u0435\u0451 \u043f\u0430\u0440\u0441\u0438\u0442 \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u0441\u0435\u0441\u0441\u0438\u044e <b>org.kurento.jsonrpc.Session<\/b>. \u0415\u0441\u043b\u0438 \u0431\u044b\u043b\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u043e\u0442 \u201cconnect\u201d, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f \u0438 \u0435\u0439 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 sessionID. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0442\u043e \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0438\u0449\u0435\u0442\u0441\u044f \u201c<b>SessionId<\/b>\u201d \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u0442\u0435\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<p>  <i>\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435:<\/i><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/fq\/bf\/ik\/fqbfikcbzlingcoumpzl3bsm_uw.png\"><br \/>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u044b\u0432\u0435 \u0441\u0432\u044f\u0437\u0438 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u201c<b>connect<\/b>\u201d \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u201c<b>SessionId<\/b>\u201d \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u0422\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0432\u044f\u0436\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u0442\u0430\u0440\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0435\u0439 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u044b.<\/p>\n<h3>\u041a\u043b\u0438\u0435\u043d\u0442<\/h3>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c JavaScript \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043e\u0442 Kurento. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u043c gui \u0438 \u043a\u043e\u0434\u043e\u043c. <\/p>\n<p>  \u041d\u0430\u0434\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 <b>pom.xml<\/b>:  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438: pom.xml<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"xml\">&lt;!-- https:\/\/mvnrepository.com\/artifact\/org.kurento\/kurento-jsonrpc-js --&gt; &lt;dependency&gt;     &lt;groupId&gt;org.kurento&lt;\/groupId&gt;     &lt;artifactId&gt;kurento-jsonrpc-js&lt;\/artifactId&gt;     &lt;version&gt;6.13.0&lt;\/version&gt; &lt;\/dependency&gt;  &lt;!-- https:\/\/mvnrepository.com\/artifact\/org.webjars\/webjars-locator --&gt; &lt;dependency&gt;     &lt;groupId&gt;org.webjars&lt;\/groupId&gt;     &lt;artifactId&gt;webjars-locator&lt;\/artifactId&gt;     &lt;version&gt;0.40&lt;\/version&gt; &lt;\/dependency&gt; \t &lt;!-- https:\/\/mvnrepository.com\/artifact\/org.webjars.bower\/sockjs-client --&gt; &lt;dependency&gt;     &lt;groupId&gt;org.webjars.bower&lt;\/groupId&gt;     &lt;artifactId&gt;sockjs-client&lt;\/artifactId&gt;     &lt;version&gt;1.4.0&lt;\/version&gt; &lt;\/dependency&gt; <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430:   <\/p>\n<ol>\n<li><b>\/src\/main\/resources\/static\/kurento-client.html<\/b> \u2014 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0434\u043b\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0443\u0442 \u043a\u043d\u043e\u043f\u043a\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/li>\n<li><b>\/jsonrpc-demo\/src\/main\/resources\/static\/js\/kurento-client.js<\/b> \u2014 \u0441\u043a\u0440\u0438\u043f\u0442 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c.<\/li>\n<\/ol>\n<p>  \u0414\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043d\u0430\u0434\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 CallBack\u2019\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445 \u0438 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<p>  \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430:<br \/>  <b>var configuration = {\u2026 }<\/b><br \/>  \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442:<br \/>  <b>var jsonRpcClientWs = new RpcBuilder.clients.JsonRpcClient(configuration);<\/b><\/p>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043a\u043e\u0434\u0435 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438:  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 html: kurento-client.html<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"xml\">&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; \t&lt;meta charset=&quot;utf-8&quot;&gt; \t&lt;script src=&quot;webjars\/sockjs-client\/dist\/sockjs.js&quot;&gt;&lt;\/script&gt; \t&lt;script src=&quot;js\/kurento-jsonrpc.js&quot;&gt;&lt;\/script&gt; \t&lt;script src=&quot;js\/kurento-client.js&quot;&gt;&lt;\/script&gt; &lt;\/head&gt;  &lt;body&gt;     &lt;h1&gt;Kurento JSON RPC Demo&lt;\/h1&gt;     &lt;h2&gt;Client by Kurento&lt;\/h2&gt;     &lt;p&gt;Press F12 to see logs in console.&lt;\/p&gt;      &lt;!-- \u041a\u043d\u043e\u043f\u043a\u0430 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 --&gt;     &lt;input type=&quot;button&quot; value=&quot;Send 'Hello.'&quot; onclick=&quot;sendTextMessage('Hello.')&quot;&gt;     &lt;br&gt;&lt;br&gt;      &lt;!-- \u041a\u043d\u043e\u043f\u043a\u0430 \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u043e\u043a\u0435\u0442\u0430 --&gt;     &lt;input type=&quot;button&quot; value=&quot;Close socket&quot; onclick=&quot;closeSocket()&quot;&gt;     &lt;br&gt;&lt;br&gt;      &lt;!-- \u041a\u043d\u043e\u043f\u043a\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f --&gt;     &lt;input type=&quot;button&quot; value=&quot;Reconnect&quot; onclick=&quot;reconnect()&quot;&gt;  &lt;\/body&gt; &lt;\/html&gt; <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 JavaScript: kurento-client.js<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var jsonRpcClientWs = null; \/\/ \u043a\u043b\u0438\u0435\u043d\u0442 var mySessionId; \/\/ id \u0442\u0435\u043a\u0443\u0449\u0435\u0439\/\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0435\u0441\u0441\u0438\u0438.  window.onload = function() {      \/\/ \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f     var configuration = {          \/\/ \u0412\u0440\u0435\u043c\u044f \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 \u043c\u0435\u0436\u0434\u0443 ping-pong \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438.          \/\/ \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0442\u043e \u043f\u0438\u043d\u0433\u0438 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b.         heartbeat: 10000,           \/\/ true\/false \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 &quot;closeSession&quot; \u043f\u0435\u0440\u0435\u0434 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c         \/\/ \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043e\u0440\u0432\u0430\u0442\u044c \u0441\u0432\u044f\u0437\u044c (\u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0440\u0430\u0437\u0443 \u0443\u0437\u043d\u0430\u0435\u0442 \u043e\u0431 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u043f\u043e \u043f\u0438\u043d\u0433\u0443)         sendCloseMessage: true,          ws: {             uri: 'https:\/\/' + location.host + '\/jsonrpc', \/\/ URI \u0434\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430             useSockJS: true, \/\/ true (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SockJS) \/ false (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c WebSocket)             onconnected: connectCallback,         \/\/ callback \u043d\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435             ondisconnect: disconnectCallback,\t     \/\/ callback \u043d\u0430 \u043e\u0431\u0440\u044b\u0432 \u0441\u0432\u044f\u0437\u0438             onreconnecting: reconnectingCallback, \/\/ callback \u043d\u0430 \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435             onreconnected: reconnectedCallback,   \/\/ callback \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c             onerror: errorCallback                \/\/ callback \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0443         },         rpc: {             \/\/ \u0432\u0440\u0435\u043c\u044f \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445 \u043d\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.             \/\/ (\u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u0434\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430, \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d)             requestTimeout: 10000,             myOwnMethod: myOwnMethodCall \/\/ \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u0432\u043e\u0439 \u043c\u0435\u0442\u043e\u0434         }     }      \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f     jsonRpcClientWs = new RpcBuilder.clients.JsonRpcClient(configuration); };  window.onbeforeunload = function() {     jsonRpcClientWs.close(); }  function connectCallback() {     console.log(&quot;connect&quot;);     \/\/ \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043a\u0435\u0442\u0430, \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0441\u0435\u0441\u0441\u0438\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435     sendConnect();  }  function disconnectCallback() {     console.log(&quot;disconnect&quot;); }  function reconnectingCallback() {     console.log(&quot;REconnectING&quot;); }  function reconnectedCallback() {     console.log(&quot;REconnectED&quot;);     \/\/ \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0441\u0435\u0441\u0441\u0438\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435     sendConnect(); }  function errorCallback(error) {     console.log(&quot;error: &quot;, error); }  \/\/ \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 function sendTextMessage(textMsg) {     var method = &quot;text-message&quot;;     var params = { text: textMsg };      jsonRpcClientWs.send(method, params, function(error, response) {         if (error) {             console.log(&quot;error:&quot;, error);             return;         }         console.log(&quot;response:&quot;, response);     }); }  \/\/ \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0441\u043e\u043a\u0435\u0442 \/\/ \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 function closeSocket() {     console.log(&quot;closeSocket&quot;);     jsonRpcClientWs.close(); }  \/\/ \u043f\u0435\u0440\u0435\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \/\/ \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 function reconnect() {     console.log(&quot;reconnect&quot;);     jsonRpcClientWs.reconnect(); }  \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441 \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0441\u044f \u0418\u0414 \u0441\u0435\u0441\u0441\u0438\u0438. function sendConnect(){     var method = &quot;connect&quot;;     var params = {};      if(mySessionId){         params = { sessionId: mySessionId };     }      jsonRpcClientWs.send(method, params, function(error, response) {         mySessionId = undefined;         if (error) {             console.log(&quot;error:&quot;, error);             return;         }         console.log(&quot;response:&quot;, response);         if (response.value == &quot;OK&quot;){             mySessionId = response.sessionId;         }     }); }  \/\/ \u0421\u0432\u043e\u0439 \u043c\u0435\u0442\u043e\u0434. function myOwnMethodCall(params, request){     console.log(&quot;==== myOwnMethodCall ====&quot;);     console.log(&quot;params: &quot;, params);     console.log(&quot;request: &quot;, request); } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435:<i> <a href=\"https:\/\/localhost\">localhost<\/a>:8080\/kurento-client.html<\/i><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043e\u043d \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u043a \u0441\u043e\u043a\u0435\u0442\u0443 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0438 \u043d\u0430\u0447\u043d\u0435\u0442 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u201c<b>ping<\/b>\u201d. \u0412 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u0440\u044b\u0432\u0430 \u0441\u0432\u044f\u0437\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0441\u0440\u0430\u0437\u0443.<\/p>\n<p>  \u0412\u043d\u0443\u0442\u0440\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430 JavaScript \u043d\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0435\u0441\u0441\u0438\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c \u0435\u0451 \u0441\u0430\u043c\u0438, \u0432\u044b\u0437\u044b\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>sendConnect()<\/b> \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 <b>onconnected<\/b> \u0438 <b>onreconnected<\/b>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441 \u0418\u0414 \u043d\u0430\u0448\u0435\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<p>  \u0411\u0435\u0433\u043b\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0442\u0430\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u201c<b>peerID<\/b>\u201d, \u043d\u043e \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043d\u0430 Java \u043e\u043d \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u0435\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0430\u0448 <b>SessionId<\/b> \u0445\u0440\u0430\u043d\u0438\u043c \u0441\u0430\u043c\u0438.<\/p>\n<h3>\u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u043b\u0438 \u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c<\/h3>\n<h4>\u041e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0443:<\/h4>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0441\u0435\u0441\u0441\u0438\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043a\u043b\u0438\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c callback \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u043e\u0442\u0432\u0435\u0442\u0430:<br \/>  <b>jsonRpcClientWs.send( method, params, callback( error, response ) )<\/b>;<br \/>  \u0433\u0434\u0435,  <\/p>\n<ul>\n<li><b>method<\/b> \u2014 \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u0430\u044f, \u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u0435\u0451 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0430\u043c \u0438 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u0442 \u043e \u043d\u0435\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u043c\u0443 \u043a\u043e\u0434\u0443. \u0415\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0442\u043e \u043e\u043d \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a handleRequest \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 \u0435\u043c\u0443 \u044d\u0442\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0438 \u0435\u0451 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.<\/li>\n<li><b>params<\/b> \u2014 \u044d\u0442\u043e js \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/li>\n<li><b>callback( error, response )<\/b> \u2014 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438\u043b\u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \u0412 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 response \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u043e\u0442\u0432\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/li>\n<\/ul>\n<p>  <\/p>\n<h4>\u041e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043a \u043a\u043b\u0438\u0435\u043d\u0442\u0443:<\/h4>\n<p>  \u0421\u0435\u0440\u0432\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438: \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u043e\u043f\u043e\u0432\u0435\u0449\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0431\u0435\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>  \u041d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043c\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 handleRequest. \u041e\u0442\u0442\u0443\u0434\u0430 \u043c\u043e\u0436\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0438 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c: <b>transaction.sendResponse( jsonObject )<\/b>;<br \/>  \u0433\u0434\u0435, <b>jsonObject<\/b> \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a:   <\/p>\n<pre><code class=\"java\">JsonObject params = new JsonObject(); params.addProperty(&quot;name&quot;, &quot;Patison&quot;); params.addProperty(&quot;size&quot;, 11); params.addProperty(&quot;isGood&quot;, true); <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0430\u0434\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043f\u043e\u0437\u0436\u0435, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c: <b>transaction.startAsync()<\/b>;<br \/>  \u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u0435\u0439\u0447\u0430\u0441, \u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041d\u0430\u043c \u0436\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <b>transaction<\/b>, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0443\u0436\u043d\u043e \u043f\u043e \u043b\u043e\u0433\u0438\u043a\u0435.<\/p>\n<p>  \u041f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0431\u0435\u0437 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (\u043e\u043f\u043e\u0432\u0435\u0449\u0430\u0442\u044c) \u043c\u043e\u0436\u043d\u043e \u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438: <br \/>  <b>kurentoSession.sendNotification(method, params);<\/b><br \/>  \u0421 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043c\u044b \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b: <b>method<\/b> \u2014 \u044d\u0442\u043e \u0438\u043c\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b, <b>params<\/b> \u2014 \u044d\u0442\u043e jsonObject.<\/p>\n<p>  \u0421\u0435\u0441\u0441\u0438\u0438 \u043d\u0430\u0434\u043e \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043c\u0435\u0442\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430: <b>afterConnectionEstablished(Session session)<\/b><\/p>\n<h4>\u041a\u0430\u043a \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f\/\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430:<\/h4>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u0432 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435\/\u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u0449\u0435\u0442 \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u0443\u044e callback \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u0441\u0432\u043e\u0438\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0435\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f. \u0412 \u043a\u043e\u0434\u0435 \u0432\u044b\u0448\u0435, \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e: <b>myOwnMethod: myOwnMethodCall<\/b>.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u043c\u0435\u0442\u043e\u0434 method===\u201d<b>myOwnMethod<\/b>\u201d, \u043e\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <b>myOwnMethodCall(params, request)<\/b>.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d <b>errorCallback(error)<\/b>. \u0422.\u0435. \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0435\u043c \u0434\u043b\u044f \u043b\u043e\u0433\u0438\u043a\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u0430.<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u041d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u0434\u043b\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<br \/>  \u0418\u0437-\u0437\u0430 \u0441\u043a\u0440\u043e\u043c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 Kurento JSON RPC \u0438 \u043e\u0447\u0435\u043d\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043d\u0435\u0439 \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435, \u044f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451, \u0447\u0442\u043e \u0443\u0437\u043d\u0430\u043b, \u0438\u0437\u0443\u0447\u0430\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044f.<\/p>\n<p>  \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u043c\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u043a\u043b\u0438\u0435\u043d\u0442, \u043d\u0435 \u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 (\u043d\u0435 \u043d\u0430\u0434\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u043e\u043c \u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439). \u0422\u043e\u043b\u044c\u043a\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0423\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u043b\u044e\u0434\u0438 \u0438 \u0438\u043c \u0443\u0436\u0435 \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0435\u0451 \u0440\u0430\u0431\u043e\u0442\u044b. <\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438: <a href=\"https:\/\/github.com\/MatIvan\/jsonrpc-demo\">https:\/\/github.com\/MatIvan\/jsonrpc-demo<\/a><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/inobitec\/blog\/505934\/\"> https:\/\/habr.com\/ru\/company\/inobitec\/blog\/505934\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/inobitec\/blog\/505934\/\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/6a\/je\/t_\/6ajet_bvdpxuml-smf7ng6utjos.png\"><\/div>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0435\u0442 Kurento, \u043a\u0430\u043a WebRTC \u043c\u0435\u0434\u0438\u0430-\u0441\u0435\u0440\u0432\u0435\u0440. \u041d\u043e \u0432 \u0438\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 git-\u0445\u0430\u0431\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 JSON-RPC, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0435\u0440\u0435\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0441\u0435\u0441\u0441\u0438\u0438 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 Java. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 Spring Boot \u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0430 JavaScript.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-305134","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/305134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=305134"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/305134\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=305134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=305134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=305134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}